Настройки приложения ASP.NET Core MVC

Я пытаюсь использовать переменные конфигурации в моем проекте ASP.NET Core MVC.

Вот где у меня так далеко:

  1. Создал appsettings.json
  2. Создан класс AppSettings
  3. Теперь я пытаюсь внедрить его в 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"

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