В aspnet core 2, когда мы хотим получить доступ к конфигурации во время запуска, мы можем сделать это благодаря внедрению зависимостей, насколько я понял.
Для этого кода ниже, как мы можем передать объект IConfiguration
этому классу с преимуществами внедрения зависимостей;
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
Я видел предложение:
"Объект IConfiguration по умолчанию зарегистрирован в DI."
Как мы можем добиться этого?
В program.cs есть такой код, мы устанавливаем IConfiguration
объект в startup.cs классе с этим кодом ниже? Я думал .UseStartup ()
Код выполняет эту работу (передавая объект IConfiguration в класс Startup) для нас. Но как?
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(SetupConfiguration)
.UseStartup<Startup>();
private static void SetupConfiguration(WebHostBuilderContext ctx, IConfigurationBuilder builder)
{
//Remove the default configuration options
builder.Sources.Clear();
builder.AddJsonFile("config.json", false, true).
AddEnvironmentVariables();
}
}
Я был бы очень рад, если бы кто-то мог объяснить это с глубокими подробностями.