【问题标题】:.NET Core Dependency Injection - Force Immediate Activation.NET Core 依赖注入 - 强制立即激活
【发布时间】:2017-07-03 13:44:22
【问题描述】:
据我了解,在调用其中一个构造函数(如我的 MVC 项目中的控制器)之前,注入的类不会被激活。但是,是否可以立即强制激活单例,这样我就不必等待控制器被调用?我想我可以做到:
services.AddSingleton(new MySingleton());
但是如果 MySingleton 在其构造函数中使用 DI 会怎样?有没有办法调用构造函数?我是否应该更改构造函数以将 IServiceProvider 作为参数并手动提取依赖项?:
_myDependency = serviceProvider.GetService<MyDependency>();
【问题讨论】:
标签:
c#
.net
dependency-injection
asp.net-core-mvc
【解决方案1】:
假设我们有一个这样实现的类。
public class MySingleton {
private readonly IMyDependency dependency;
MySingleton(IMyDependency dependency) {
this.dependency = dependency;
}
}
如果我正确理解你的问题,你正在寻找这样的东西。
services.AddSingleton<IMyDependency, MyDependency>();
services.AddSingleton<MySingleton>(provider => new MySingleton(provider.GetService<IMyDependency>()));
这将创建一个实现工厂,用于在需要时初始化您的单例。手动初始化类型时提供服务提供者的重载。
例如,如果您需要在注册后立即访问您的单例。
var serviceProvider = services.BuildServiceProvider();
MySingleton singleton = serviceProvider.GetService<MySingleton>();