Передача конфигурации в веб-задания через внедрение зависимостей - PullRequest
0 голосов
/ 12 февраля 2019

Этот вопрос основан на комментариях, связанных с этим ответом .

Подводя итог, можно сказать, как передать параметры конфигурации в веб-задание, не добавляя интерфейс IConfiguration в качестве зависимости, когдавызов ConfigureServices для установки зависимостей.

Я думал, что это будет хороший способ сделать это:

IHostBuilder builder = new HostBuilder;

...

builder.ConfigureServices((context, services) =>
{
    services.AddSingleton<IMyModelClass, MyModelClass>(sp => new MyModelClass(context.Configuration));
    services.AddSingleton<IMyServiceClass, MyServiceClass>(sp => new MyServiceClass(new MyModelClass()));
})

Здесь MyModelClass - это класс, который читает параметры конфигурации, например:

public class MyModelClass : IMyModelClass
{
    public string MySetting { get; set; }

    public MyModelClass(IConfiguration config)
    {
        this.MySetting = config["MySetting"];
    }
}

Таким образом, он инкапсулирует эти настройки и может быть передан другим классам (например, MyServiceClass), которым требуется доступ к настройкам конфигурации.

Но, похоже, это не лучший способ.Есть еще предложения?

1 Ответ

0 голосов
/ 12 февраля 2019

Итак, давайте предположим, что есть следующая конфигурация

{
  "MyModelSection": {
    "MySetting": "SomeValue"
  }
}

Это просто очень простой пример.

Соответствующая модель будет выглядеть как

public class MyModelClass: IMyModelClass {
    public string MySetting { get; set;}
}

Выше можно извлечь из конфигурации и зарегистрировать с услугами

builder.ConfigureServices((context, services) => {
    var configuration = context.Configuration.

    var myModel = configuration.GetSection("MyModelSection").Get<MyModelClass>();

    services.AddSingleton<IMyModelClass, MyModelClass>(myModel);

    services.AddSingleton<IMyServiceClass, MyServiceClass>();
})
...