簡體   English   中英

通過依賴注入將配置傳遞給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是一個讀取配置設置的類,如下所示:

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

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

因此,它封裝了這些設置,並且可以傳遞給需要訪問配置設置的其他類(例如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>();
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM