【问题标题】:Passing configuration to webjobs via dependency injection通过依赖注入将配置传递给 webjobs
【发布时间】:2019-02-12 02:32:02
【问题描述】:

此问题基于与this answer 关联的 cmets。

总而言之,问题是在调用 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 是一个读取配置设置的类,像这样:

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

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

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

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

【问题讨论】:

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


【解决方案1】:

假设有以下配置

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

【讨论】:

    猜你喜欢
    • 2022-11-08
    • 2021-01-16
    • 2023-03-09
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 2019-12-28
    • 1970-01-01
    相关资源
    最近更新 更多