通过依赖注入将配置传递给 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是一个class读取配置设置的,像这样:
public class MyModelClass : IMyModelClass
{
public string MySetting { get; set; }
public MyModelClass(IConfiguration config)
{
this.MySetting = config["MySetting"];
}
}
因此它封装了这些设置,可以传递给需要访问配置设置的其他 classes(如 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>();
})
此问题基于与
总而言之,问题是如何在调用 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是一个class读取配置设置的,像这样:
public class MyModelClass : IMyModelClass
{
public string MySetting { get; set; }
public MyModelClass(IConfiguration config)
{
this.MySetting = config["MySetting"];
}
}
因此它封装了这些设置,可以传递给需要访问配置设置的其他 classes(如 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>();
})