该问题基于与this answer相关的评论。
总而言之,问题是如何在调用ConfigureServices设置依赖项时如何在不将IConfiguration接口作为依赖项注入的情况下将配置设置传递到Web作业。
我曾经以为这是个好方法:
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)。
但这似乎不是最好的方法。还有其他建议吗?
答案 0 :(得分:3)
因此,假设存在以下配置
{
"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>();
})