DependencyInjection: инициализировать класс, прежде чем он будет вызван (обязательно)? - PullRequest
0 голосов
/ 29 сентября 2018

Прежде всего, я использую пакет внедрения зависимостей от Microsoft.(ServiceProvider, ServiceCollection), который пока работает довольно хорошо, за исключением этой проблемы.

У меня есть классы, которые я регистрирую в своем DI, как этот

this.AddSingleton<IAppWorker, AppWorker>();
this.AddSingleton<IAppController, AppController>();

Эти классы никогда не доступны, но они вызывают метод внутри своих конструкторов.Действительно ли мне нужно явно разрешить класс и вызвать метод вне конструктора?

Или есть ли способ заставить его просто инициализировать новый экземпляр и сохранить его, когда мне понадобится разрешить его?Я довольно новичок в этом, и мне трудно понять, что вообще искать.

Есть ли для этого специальное название?Или это просто невозможно.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Не уверен, что вы пытаетесь достичь.Желательно избегать добавления логики в конструктор.Было бы лучше разрешить эти экземпляры с помощью инжектора конструктора и вызывать методы, когда они вам нужны.

Если вы новичок в этом, я бы предложил «Внедрение зависимостей в .NET book» (https://www.manning.com/books/dependency-injection-in-dot-net-second-edition).

0 голосов
/ 29 сентября 2018

Вы можете создать экземпляры в корне композиции и добавить их в контейнер DI, используя перегрузку AddSingleton<TService>(IServiceCollection, TService).

Добавляет одноэлементную службу типа, указанного вTService с экземпляром, указанным в creationInstance с указанным IServiceCollection.

var instance1 = new AppWorker();
services.AddSingleton<IAppWorker>(instance1);

var instance2 = new AppController();
services.AddSingleton<IAppController>(instance2);

Ссылка Внедрение зависимостей в ASP.NET Core

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...