通过依赖注入传递配置webjobs

问题描述 投票:2回答:1

这个问题是基于与this answer相关评论。

总之,问题是如何通过配置设置保存到网工作,而无需调用ConfigureServices建立依赖关系时注入为IConfiguration接口的依赖。

我原以为这将是做一个好办法:

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)。

但似乎这是不是最好的方法。任何进一步的建议?

c# asp.net-core configuration azure-webjobs
1个回答
3
投票

所以,让我们假设有以下配置

{
  "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>();
})
© www.soinside.com 2019 - 2024. All rights reserved.