Повторное связывание и повторное внедрение экземпляров среды выполнения
У меня такой вопрос: могу ли я перепривязать экземпляр и повторно внедрить его везде, где мне вводят атрибут [Inject]. Экземпляр был связан так:
[SerializeField] private MyClass inst;
public override InstallBindings()
{
Container.BindInstance(inst);
}
А потом, когда изменился инст, я попытался сделать:
Container.BindInstance(inst);
Container.QueueForInject(inst);
но это не сработало, и каждое поле с типом MyClass было введено следующим образом [Inject] private MyClass inst;
так же, как прежде. Я просто неправильно понимаю концепцию. Это вообще возможно?
1 ответ
Вы можете использовать rebind следующим образом:
Container.Rebind<Foo>().FromInstance(foo)
Или же:
Container.Unbind<Foo>();
Container.BindInstance(foo);
Тем не менее, такие вещи считаются плохой практикой. При правильном использовании внедрения зависимостей привязки будут добавляться только один раз во время установки, и их не нужно будет менять снова. Это важно, потому что объекты, возможно, уже были созданы и нуждаются в доступе к изменениям, внесенным позже в контейнер.
Если экземпляр вашего класса изменяется во время выполнения, то другим способом сделать это может быть привязка класса, который оборачивает активный экземпляр, а затем генерирует события при его изменении.