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

Passing configuration to webjobs via dependency injection

此问题基于与 相关的评论。

总而言之,问题是如何在调用 ConfigureServices 设置依赖项时将配置设置传递给 Web 作业而不注入 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是一个class读取配置设置的,像这样:

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

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

因此它封装了这些设置,可以传递给需要访问配置设置的其他 classes(如 MyServiceClass)。

但这似乎不是最好的方法。还有什么建议吗?

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

{
  "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>();
})