[英]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.