почему я должен использовать внедрение зависимостей в своей архитектуре основного проекта. net? - PullRequest
0 голосов
/ 15 апреля 2020

Я хочу подробно узнать о контейнере DI. net Core. Если предположить, что у нас есть сто классов и соответствующих интерфейсов, и я зарегистрировал все зависимости в моем файле startup.cs. тогда мой вопрос, какой из них является правдой? a) все сто экземпляров создадут время запуска, потому что я упомянул всю зависимость в startup.cs. b) будут созданы только те экземпляры во время выполнения, которые определены в конструкторе.

Ответы [ 2 ]

3 голосов
/ 15 апреля 2020

Это в некоторой степени зависит от срока службы, но, как правило, они создаются по мере необходимости. Например, если вы вводите что-то в контроллер, то когда этот контроллер активируется, создаются его зависимости (определенные в конструкторе), и создаются все зависимости, которые имеют эти зависимости, и т. Д. c. Исключением будет что-то с одиночным временем жизни. Он будет создан в первый раз, когда потребуется, а затем, очевидно, будет снова и снова использоваться снова и снова.

Длинный и короткий, нет, не все 100 сервисов создаются при запуске приложения, если только все 100 сервисов каким-то образом не используются во время запуск приложения (что приводит к необходимости их создания).

1 голос
/ 16 апреля 2020

По сути, вам нужно представить его в виде списка сервисов, которые регистрируются в вашем файле startup.cs и будут соответственно использоваться при выполнении вашего приложения.

Для этого у вас есть способы внедрить их, например (и, на мой взгляд, наиболее часто используемый), с помощью инжектора конструктора. Тем не менее, теперь мы можем говорить о жизнях, связанных с ними. Я кратко express их:

AddSingleton: Для каждого HTTP-запроса, который вы делаете, всегда будет использоваться один и тот же экземпляр, другими словами: всегда один и тот же экземпляр вводится из контейнера.

AddScoped : Новая служба создается с каждым HTTP-запросом, но используется только в рамках этого запроса в «разных местах» вашего приложения.

AddTransient : Для каждого HTTP-запроса будет использоваться другой экземпляр, и в «разные места» вашего приложения будет добавляться другой экземпляр.

Что касается вашего заглавного вопроса, ну, внедрение зависимостей это способ упростить создание ваших зависимостей, так как это будет сама структура, выполняющая «грязную работу».

...