DependencyInjection:初始化类,然后调用它(必需)吗?

时间:2018-09-29 12:33:41

标签: c# .net

首先,我正在使用Microsoft的依赖项注入程序包。 (ServiceProvider,ServiceCollection)到目前为止进展顺利,除了这个问题。

我有一些类,可以像这样注册到我的DI上

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

这些类从不访问,但是它们在其构造函数中调用一个方法。我真的需要显式地解析该类,并在构造函数之外调用该方法吗?

或者是否有一种方法可以使其仅初始化一个新实例,并在需要解决该问题时将其存储?我对此很陌生,甚至都很难知道要搜索什么。

为此有一个特殊的名称吗?还是只是不可能。

2 个答案:

答案 0 :(得分:2)

您可以在合成根目录中创建实例,然后使用AddSingleton<TService>(IServiceCollection, TService)重载将其添加到DI容器中。

  

TService中指定类型的单例服务与在 implementationInstance 中指定的实例添加到指定的IServiceCollection

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

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

引用Dependency injection in ASP.NET Core

答案 1 :(得分:1)

不确定要完成的任务。建议避免向构造函数添加逻辑。最好使用构造函数注入来解析这些实例,并在需要时调用这些方法。

如果您对此不熟悉,我建议“ .NET书中的依赖注入(https://www.manning.com/books/dependency-injection-in-dot-net-second-edition)。