Повторное связывание и повторное внедрение экземпляров среды выполнения

У меня такой вопрос: могу ли я перепривязать экземпляр и повторно внедрить его везде, где мне вводят атрибут [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);

Тем не менее, такие вещи считаются плохой практикой. При правильном использовании внедрения зависимостей привязки будут добавляться только один раз во время установки, и их не нужно будет менять снова. Это важно, потому что объекты, возможно, уже были созданы и нуждаются в доступе к изменениям, внесенным позже в контейнер.

Если экземпляр вашего класса изменяется во время выполнения, то другим способом сделать это может быть привязка класса, который оборачивает активный экземпляр, а затем генерирует события при его изменении.

Другие вопросы по тегам