0

В .NET Core существует три разных срока службы, которые можно использовать: Transient, Scoped и Singleton.Срок службы в цепной инъекции для зависимостей

Давайте предположим, что у меня есть следующая цепь depencency-впрыскивается услуг:

Service A>Service B>Service C,

означает, что Service A имеет Service B впрыскивается (например Service A зависит от Service B) и Service B имеет Service C впрыскивается.

Теперь рассмотрим Service B имея Singleton жизни, и Service C имея Transient жизни. Потому что Service B является Singleton, он создается только один раз. Service C - Transient, а потому, что Service B - это Singleton, Service C все еще только один раз.

Является ли эта аргументация правильной, и, таким образом, срок службы Transient, установленный для Service C, не имеет смысла? Или я ошибаюсь здесь?

ответ

2

То, что вы здесь описываете, является общей проблемой, известной как Captive Dependency. Служба C становится в плену, потому что ее потребитель имеет более длительный срок службы.

Эта проблема широко распространена и является распространенным источником ошибок в приложениях, использующих контейнеры для инъекций и контейнеры DI. Когда приложение растет, эти проблемы могут легко проскальзывать в необнаруженном. Исходя из опыта, я могу сказать, что отслеживание ошибки в такой неправильной конфигурации может занять много времени.

К сожалению, встроенный контейнер .NET Core не обнаруживает и не предотвращает подобные ошибки. Некоторые из других, более зрелых библиотек DI для .NET на самом деле имеют такие функции, где они обнаруживают и предотвращают подобные неправильные конфигурации.

+0

Я вижу, спасибо за ваши объяснения! – Froodooo

 Смежные вопросы

  • Нет связанных вопросов^_^