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

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

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

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

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

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

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

Всего 2 ответа


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

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

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

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

Задание зависимостей в ASP.NET Core


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

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


Есть идеи?

10000