2

TLDR: Каков наилучший способ использования контейнера IoC после его настройки?Лучшая практика использования контейнера для впрыскивания зависимостей/обслуживания?


Я читал на IoC (инъекции зависимостей, локаторы обслуживания и т. Д.). Я получаю DI хорошо, и что контейнеры IoC могут упростить создание объектов, но то, что я не имеет, - это все, что показывает, как на самом деле использовать контейнер для инъекций, как только вы его настроили. Большинство учебных пособий останавливаются на том, чтобы просто настроить контейнер и отправить вам свой путь, но по какой-то причине он просто не нажимает, как наилучшим образом использовать контейнер для инъекций после его настройки.

Из того, что я могу сказать, что есть 2 способа я мог бы использовать контейнер:

  1. Instantiate всю мыслимая зависимость фронт и иметь тот поток через приложение через единую точку входа с потенциально огромным количеством зависимостей ,
    • Это кажется глупым, потому что вы можете создавать множество экземпляров классов, которые вам действительно не нужны. Также кажется, что вам вряд ли понадобится контейнер для этого.
  2. Переместите контейнер для инъекций в какой-либо глобальный объем и вызовите его, когда мне нужен новый объект, который имеет зависимости.
    • Это кажется глупым, потому что в.) теперь вы создали глобальный/синглтон (блевать) и б.) теперь ваш инжектор зависимости iteself является зависимостью.

Оба эти варианта не кажутся идеальными, так что мне интересно, если я просто отсутствует нечто фундаментальное о том, как предполагается инъекции контейнер для использования на практике. Любая помощь будет оценена!

+4

Я могу посоветовать вам получить копию [этой книги] (https://www.manning.com/books/dependency-injection-in-dot-net). – Steven

ответ

-1

Вы ищете концепцию жизни объектов. У Autofac есть great primer по этому вопросу.

+1

Как это ответ на вопрос? Хотя время жизни очень важно, особенно при выполнении DI, вопрос OP явно не касается сроков жизни ... И, конечно же, не о конкретном контейнере ... –

+0

@ Ric. Вопрос в том, когда использовать контейнер в течение всего срока службы приложение, после запуска и начального состава. Это именно то, что я имею в виду: «Переместите контейнер инъекции в какую-то глобальную область и вызовите его всякий раз, когда мне нужен новый объект с зависимостями». Это вызов глобального контейнера обычно делается для того, чтобы получить объект со временем жизни меньше, чем приложение, скажем, контроллер для отдельного запроса. Таким образом, времена жизни представляют собой концепцию, которая затрагивает этот вопрос и важна для понимания вопроса в контексте. –

+0

@ Ric.Net И другой downvoter Я бы очень хотел увидеть аргументированный контраргумент от вас, esp после того, как вы перечитали OP и праймер. Или, может быть, ответ, если вы считаете, что это так отходит от базы.(У меня лично нет энергии, чтобы отвечать на вопросы о контейнерах, хотя, возможно, вы захотите уменьшить это [мой ответ, основанный на том же «О, хорошо, я так думаю или говорю о контейнерах, но пусть будет хорошо и посмотрю вверх этот отличный справочный пост, который приходит на ум «инстинкт, который сегодня получил реальную авантюру» (http://stackoverflow.com/a/37830713/11635)) –