如何在 startup.cs 中添加提供者而不覆盖所有预先存在的提供者?

我在startup.cs中看到了添加提供程序的代码(假设添加此提供程序的扩展方法称为AddXXX):

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()  // have to do tedious setup which can be done by program.cs
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json",optional: false,reloadOnChange: true)
        .AddEnvironmentVariables();

    if (env.IsDevelopment())
    {
        builder.AddXXX();
    }

    Configuration = builder.Build();   
    ... // setup other middlewares
}

但考虑到我们已经在 program.cs 中使用了默认的主机构建器:

public class Program
{
   public static void Main(string[] args) {
      CreateHostBuilder(args).Build().Run();
   }

   public static IHostBuilder CreateHostBuilder(string[] args) =>
       Host.CreateDefaultBuilder(args)
           .ConfigureWebHostDefaults(webBuilder => {
              webBuilder.UseStartup<Startup>();
           });
}

我不想再配置ConfigurationBuilder了,比较繁琐,比如添加CreateDefaultBuilder已经添加的json文件提供程序,所以我觉得最有效的方法是在程序中添加提供程序。 cs为:

public class Program
{
   public static void Main(string[] args) {
      CreateHostBuilder(args).Build().Run();
   }

   public static IHostBuilder CreateHostBuilder(string[] args) =>
       Host.CreateDefaultBuilder(args)
           .ConfigureAppConfiguration((hostingContext,config) => {
              if (hostingContext.HostingEnvironment.IsDevelopment()) {
                 config.AddXXX();
              }
           })
           .ConfigureWebHostDefaults(webBuilder => {
              webBuilder.UseStartup<Startup>();
           });
}

我的想法正确吗?

idarkness 回答:如何在 startup.cs 中添加提供者而不覆盖所有预先存在的提供者?

来自here

...在使用通用主机(IHostBuilder)时可以将以下服务类型注入到启动构造函数中:

  • IWebHostEnvironment
  • IHostEnvironment
  • IConfiguration

所以你能做的是;

public class Startup
{
    private readonly IWebHostEnvironment _env;
    private readonly IConfiguration _config;

    public Startup(IConfiguration configuration,IWebHostEnvironment env)
    {
        _config = configuration;
        _env = env;
    }
    ...
}

在您的 CreateHostBuilder 方法中定义特定于环境的配置,如您的问题。

本文链接:https://www.f2er.com/108.html

大家都在问