Как «объект IConfiguration зарегистрирован в DI по умолчанию» в Startup.cs в .NET Core 2 - PullRequest
0 голосов
/ 06 марта 2019

В 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();
    }
}

Я был бы очень рад, если бы кто-то мог объяснить это с глубокими подробностями.

1 Ответ

0 голосов
/ 06 марта 2019

Внедрение зависимостей обрабатывается для вас экземпляром IConfiguration. Технические детали легко найти, если вы просматриваете исходный код . В этом случае есть вспомогательный класс, который имитирует базовый DI-контейнер, вы можете увидеть это здесь .

...