Прежде всего, я использую пакет инъекций для зависимостей 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 ).