Jep*_*ppe 4 .net c# dependency-injection asp.net-core-mvc
我的理解是,在调用构造函数之一之前,不会激活注入的类(例如我的 MVC 项目中的控制器)。但是,是否可以立即强制激活 Singleton,这样我就不必等待调用控制器?我想我可以这样做:
services.AddSingleton(new MySingleton());
Run Code Online (Sandbox Code Playgroud)
但是如果 MySingleton 在其构造函数中使用 DI 呢?有没有办法调用构造函数?我应该更改构造函数以将 IServiceProvider 作为参数并手动提取依赖项吗?:
_myDependency = serviceProvider.GetService<MyDependency>();
Run Code Online (Sandbox Code Playgroud)
假设我们有一个这样实现的类。
public class MySingleton {
private readonly IMyDependency dependency;
MySingleton(IMyDependency dependency) {
this.dependency = dependency;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我正确理解你的问题,你正在寻找这样的东西。
services.AddSingleton<IMyDependency, MyDependency>();
services.AddSingleton<MySingleton>(provider => new MySingleton(provider.GetService<IMyDependency>()));
Run Code Online (Sandbox Code Playgroud)
这将创建一个实现工厂,用于在需要时初始化您的单例。它是在手动初始化类型时提供服务提供者的重载。
例如,如果您需要在注册后立即访问您的单身人士。
var serviceProvider = services.BuildServiceProvider();
MySingleton singleton = serviceProvider.GetService<MySingleton>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2557 次 |
| 最近记录: |