Настройки приложения ASP.NET Core MVC
Я пытаюсь использовать переменные конфигурации в моем проекте ASP.NET Core MVC.
Вот где у меня так далеко:
- Создал appsettings.json
- Создан класс AppSettings
- Теперь я пытаюсь внедрить его в ConfigureServices, но мой класс Configuration либо не распознается, либо при использовании полной ссылки: "Microsoft.Extensions.Configuration" метод GetSection не распознается, т.е.
Класс конфигурации не распознается
Метод GetSection не распознается
Любые идеи о том, как использовать это?
2 ответа
Весь подход к конфигурированию в.NET Core действительно гибкий, но совсем не очевидный в начале. Это, вероятно, проще всего объяснить на примере:
Предположим, файл appsettings.json выглядит следующим образом:
{
"option1": "value1_from_json",
"ConnectionStrings": {
"DefaultConnection": "Server=,\\SQL2016DEV;Database=DBName;Trusted_Connection=True"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
}
}
Чтобы получить данные из файла appsettings.json, сначала необходимо настроить ConfigurationBuilder
в Startup.cs следующим образом:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
if (env.IsDevelopment())
{
// For more details on using the user secret store see https://go.microsoft.com/fwlink/?LinkID=532709
builder.AddUserSecrets<Startup>();
}
builder.AddEnvironmentVariables();
Configuration = builder.Build();
Затем вы можете получить доступ к конфигурации напрямую, но лучше создать классы Options для хранения этих данных, которые вы затем можете внедрить в свой контроллер или другие классы. Каждый из этих классов параметров представляет отдельный раздел файла appsettings.json.
В этом коде строки соединений загружаются в ConnectionStringSettings
класс, а другой вариант загружается в MyOptions
учебный класс. .GetSection
Метод получает определенную часть файла appsettings.json. Опять же, это в Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
... other code
// Register the IConfiguration instance which MyOptions binds against.
services.AddOptions();
// Load the data from the 'root' of the json file
services.Configure<MyOptions>(Configuration);
// load the data from the 'ConnectionStrings' section of the json file
var connStringSettings = Configuration.GetSection("ConnectionStrings");
services.Configure<ConnectionStringSettings>(connStringSettings);
Это классы, в которые загружаются данные настроек. Обратите внимание, как имена свойств сочетаются с настройками в файле json:
public class MyOptions
{
public string Option1 { get; set; }
}
public class ConnectionStringSettings
{
public string DefaultConnection { get; set; }
}
Наконец, вы можете получить доступ к этим настройкам, вставив OptionsAccessor в контроллер следующим образом:
private readonly MyOptions _myOptions;
public HomeController(IOptions<MyOptions > optionsAccessor)
{
_myOptions = optionsAccessor.Value;
var valueOfOpt1 = _myOptions.Option1;
}
Как правило, весь процесс настройки конфигурации в Core довольно сильно отличается. Томас Ардал имеет хорошее объяснение этого на своем сайте здесь: http://thomasardal.com/appsettings-in-asp-net-core/
Также есть более подробное объяснение Конфигурации в ASP.NET Core в документации Microsoft.
Ответ tomRedox был очень полезным - Спасибо. Кроме того, я изменил следующие ссылки на следующие версии, чтобы заставить его работать.
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.2", "Microsoft.Extensions.Configuration.Json": "1.1.1"