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

Я пытаюсь добавить appsettings.json и следовал много учебников и до сих пор не могу это сделать.

Я создаю appsettings.json

{
  "option1": "value1_from_json",

  "ConnectionStrings": {
    "DefaultConnection": "Server=,\\SQL2016DEV;Database=DBName;Trusted_Connection=True"
  },
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  }
}

Добавьте мой класс:

public class MyOptions
{
    public string Option1 { get; set; }
}

public class ConnectionStringSettings
{
    public string DefaultConnection { get; set; }
}

тогда на моем Startup.cs

public IConfiguration Configuration { get; set; }

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())
    {
        builder.AddUserSecrets<Startup>();
    }

    builder.AddEnvironmentVariables();
    Configuration = builder.Build();
}

а также:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddScoped<IDataService<Sale>, DataService<Sale>>();

    // add My services
    // 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); 
}

а также внедрил зависимость в конструктор контроллера.

public class ForecastApiController : Controller
{
    private IDataService<Sale> _SaleDataService;
    private readonly MyOptions _myOptions;

    public ForecastApiController(IDataService<Sale> service, IOptions<MyOptions> optionsAccessor)
    {
        _SaleDataService = service;
        _myOptions = optionsAccessor.Value;
        var valueOfOpt1 = _myOptions.Option1;
    }
}

РЕДАКТИРОВАНИЕ: проблема в том, что я получаю Конфигурация подчеркнута красным

 services.Configure<MyOptions>(Configuration); 

Ошибка CS1503
Аргумент 2: невозможно преобразовать из "Microsoft.Extensions.Configuration.IConfiguration" в "System.Action Exercise.Models.MyOptions

Я знаю, что есть похожие вопросы, объясняющие, как: Настройки приложения ASP.NET Core MVC

но это не работает для меня

ура

2 ответа

Решение

Вы включили правильное пространство имен?

using Microsoft.Extensions.DependencyInjection;

Также у вас была ссылка на:

Microsoft.Extensions.Options.ConfigurationExtensions

В вышеприведенной сборке мы имеем:

public static IServiceCollection Configure<TOptions>(this IServiceCollection services, IConfiguration config) where TOptions : class;

Скорее всего, вы используете метод расширения из Microsoft.Extensions.Options сборка (что не так)

public static IServiceCollection Configure<TOptions>(this IServiceCollection services, Action<TOptions> configureOptions) where TOptions : class;

Убедитесь, что вы импортировали все необходимое и у вас установлены необходимые пакеты. Тогда вы можете сделать следующее

services.Configure<MyOptions>(options => Configuration.GetSection("options1").Bind(options)); 

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

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