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

C# 通过依赖项注入将配置传递给webjobs,c#,asp.net-core,dependency-injection,configuration,azure-webjobs,C#,Asp.net Core,Dependency Injection,Configuration,Azure Webjobs,此问题基于与相关的评论 总之,问题是在调用ConfigureServices设置依赖项时,如何将配置设置传递给web作业,而不将IConfiguration接口作为依赖项注入 我原以为这是一个好办法: IHostBuilder builder = new HostBuilder; ... builder.ConfigureServices((context, services) => { services.AddSingleton<IMyModelClass, MyMod

此问题基于与相关的评论

总之,问题是在调用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()));
})
因此,它封装了这些设置,并可以传递给需要访问配置设置的其他类(如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>();
})
builder.ConfigureServices((上下文,服务)=>{
var配置=context.configuration。
var myModel=configuration.GetSection(“MyModelSection”).Get();
服务。AddSingleton(myModel);
services.AddSingleton();
})

您还应该看看这个
builder.ConfigureServices((context, services) => {
    var configuration = context.Configuration.

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

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

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