我在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>();
});
}
我的想法正确吗?
答案 0 :(得分:0)
来自here
<块引用>...在使用通用主机(IHostBuilder)时可以将以下服务类型注入到启动构造函数中:
所以你能做的是;
public class Startup
{
private readonly IWebHostEnvironment _env;
private readonly IConfiguration _config;
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
_config = configuration;
_env = env;
}
...
}
在您的 CreateHostBuilder
方法中定义特定于环境的配置,如您的问题。