Vi código para agregar un proveedor (digamos que el método de extensión para agregar este proveedor se llama AddXXX) en startup.cs:
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 }Pero teniendo en cuenta que ya hemos usado un hostbuilder predeterminado en 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>(); }); } No quiero volver a configurar ConfigurationBuilder, lo cual es bastante tedioso, por ejemplo, agregar el proveedor de archivos json que CreateDefaultBuilder ya agregó, por lo que creo que la forma más eficiente es agregar el proveedor en program.cs como:
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>(); }); }¿Es correcto mi pensamiento?
desde aquí
... los siguientes tipos de servicios se pueden inyectar en el constructor de inicio cuando se usa el host genérico (IHostBuilder):
- IWebHostEnvironment
- IHostEnvironment
- IConfiguración
Entonces, lo que puedes hacer es;
public class Startup { private readonly IWebHostEnvironment _env; private readonly IConfiguration _config; public Startup(IConfiguration configuration, IWebHostEnvironment env) { _config = configuration; _env = env; } ... } Con la configuración específica del entorno definida en su método CreateHostBuilder , como en su pregunta.