Использование 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.