Asp.net core “如何摆脱警告”;呼叫';BuildServiceProvider';“从应用程序代码…”;

Asp.net core “如何摆脱警告”;呼叫';BuildServiceProvider';“从应用程序代码…”;,asp.net-core,asp.net-core-3.1,Asp.net Core,Asp.net Core 3.1,我有以下显示警告的代码 从应用程序代码调用“BuildServiceProvider”会导致 正在创建的singleton服务的附加副本。考虑 替代方案,例如依赖注入服务作为 “配置” 下面是ConfigureServices中的一个简短片段,展示了如何使用它。基本上,我需要解析AdminDbContext以将其传递给初始化例程 public void ConfigureServices(IServiceCollection services) { servic

我有以下显示警告的代码

从应用程序代码调用“BuildServiceProvider”会导致 正在创建的singleton服务的附加副本。考虑 替代方案,例如依赖注入服务作为 “配置”

下面是
ConfigureServices
中的一个简短片段,展示了如何使用它。基本上,我需要解析AdminDbContext以将其传递给初始化例程

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<AdminDbContext>(o => o.UseSqlServer("config settings here"));

        CustomerConnectionStrings.Instance.Initialize(services.BuildServiceProvider().GetService<AdminDbContext>());
    }
public void配置服务(IServiceCollection服务)
{
services.AddDbContext(o=>o.UseSqlServer(“此处的配置设置”);
CustomerConnectionStrings.Instance.Initialize(services.BuildServiceProvider().GetService());
}
我需要做什么来摆脱这个警告


我已经看到了其他的帖子,展示了如何做到这一点,但我并没有针对我的特定用例进行连接。

尽管我相信这可能是一个问题

我建议遵循警告中的建议

考虑替代方案,例如依赖注入服务,作为“配置”的参数

/。。。
public void配置服务(IServiceCollection服务){
services.AddDbContext(o=>o.UseSqlServer(“此处的配置设置”);
//...
}
公共无效配置(IApplicationBuilder应用程序、IWebHostEnvironment环境、AdminDbContext adminDb){
CustomerConnectionString.Instance.Initialize(adminDb);
//...
}

@Nkosi的答案是正确的,但如果有人正在寻找替代方案,您可以从应用程序获得任何服务:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, AdminDbContext adminDb) {

    CustomerConnectionStrings.Instance.Initialize(App.ApplicationServices.GetService<IMyService>());

    //...
}
public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境、AdminDbContext adminDb){
CustomerConnectionStrings.Instance.Initialize(App.ApplicationServices.GetService());
//...
}
这是任何人遇到的另一个选择。有时使用单例类比使用静态类更好:
初始化
CustomerConnectionString
时,您将请求AdminDBContext并将其传递到那里。

不知道为什么我没有连接到实际的配置方法。谢谢你指出这一点!
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, AdminDbContext adminDb) {

    CustomerConnectionStrings.Instance.Initialize(App.ApplicationServices.GetService<IMyService>());

    //...
}