ASP.NET Core 3 - 在 services.AddSingelton<IMySingletone, MySingletone>(); 之后立即实例化单例

Lop*_*uch 4 c# singleton dependency-injection asp.net-core-3.0

如何立即实例化单例

services.AddSingelton<IMySingleton, MySingleton>()
Run Code Online (Sandbox Code Playgroud)

我现在正在使用这个肮脏的解决方法(GetService在每个请求中调用):

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.ApplicationServices.GetService<IFirebaseApp_ForInjection>();

    //......
}
Run Code Online (Sandbox Code Playgroud)

我知道我的单例应该在构造函数注入需要时实例化,但我不需要将它注入到任何构造函数中。

Nko*_*osi 8

如果目标单例没有显式注入的依赖项,则在将其添加到服务集合之前没有什么可以阻止它被实例化

public void ConfigureServices(IServiceCollection services) {
    //...

    IMySingleton instance = new MySingleton();
    services.AddSingelton(instance)

    //...
}
Run Code Online (Sandbox Code Playgroud)

如果存在依赖关系,则另一个选项与当前显示的解决方法类似,通过Configure在启动时将其注入到方法中

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IMySingleton instance) {
    //...
}
Run Code Online (Sandbox Code Playgroud)

这样,任何已注册的依赖项都将被解析和注入。