Использование IConfiguration глобально в mvc6

Вероятно, я долго смотрел на это, но я прыгнул в MVC6 для asp.net за последние несколько дней, хотя я действительно наслаждаюсь этим, я не могу найти удобный способ получить доступ к Конфигурации после нее определяется в Start.cs с

Configuration = new Configuration()
    .AddJsonFile("config.json")
    ...

Итак, мне нужно добавить его в DI или он уже есть? Или я должен создавать новый экземпляр всякий раз, когда мне нужно его использовать, так как можно создавать разные конфигурации (например, для IIdentityMessageService), создавать sendgrid.json и загружать его в саму Службу?

Возможно, есть очень простое решение, но, как я уже сказал, я смотрю на это уже несколько дней.

1 ответ

Решение

Только загрузите Конфигурации в вашем Startup.cs. Если они понадобятся вам позже, вы можете загрузить значения в соответствующие POCO и зарегистрировать их в DI, чтобы вы могли вводить их там, где они вам нужны. Это позволяет организовать вашу конфигурацию в разных файлах и в разных POCO так, чтобы это имело смысл для вашего приложения. Для этого уже встроена поддержка этого в внедрении зависимости. Вот как бы вы это сделали:

POCO для размещения вашей конфигурации:

public class SomeOptions
{
    public string EndpointUrl { get; set; }
}

Ваш Startup.cs загружает конфигурацию в POCO и регистрирует ее в DI.

public class Startup
{
    public Startup()
    {
        Configuration = new Configuration()
                    .AddJsonFile("Config.json")
                    .AddEnvironmentVariables();
    }

    public IConfiguration Configuration { get; set; }

    public void Configure(IApplicationBuilder app)
    {
        app.UseMvc();
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<SomeOptions>(options => 
            options.EndpointUrl = Configuration.Get("EndpointUrl"));

        services.AddMvc();
    }
}

Затем в вашем контроллере получите конфигурацию POCO, которую вы создали в Startup.cs посредством внедрения зависимостей следующим образом:

public class SomeController
{
    private string _endpointUrl;
    public SomeController(IOptions<SomeOptions> options)
    {
        _endpointUrl = options.Options.EndpointUrl;
    }
}

Протестировано с 1.0.0-бета1 сборками aspnet5.

Для получения дополнительной информации см . Основы конфигурации ASP.Net 5.

Другие вопросы по тегам