通过依赖注入将配置传递给webjobs

时间:2019-02-12 02:32:03

标签: c# asp.net-core configuration azure-webjobs

该问题基于与this answer相关的评论。

总而言之,问题是如何在调用ConfigureServices设置依赖项时如何在不将IConfiguration接口作为依赖项注入的情况下将配置设置传递到Web作业。

我曾经以为这是个好方法:

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 :(得分: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>();
})