Asp.net core 我可以根据选项有条件地添加托管服务吗?
在ASP.NET Core中,我可以使用Asp.net core 我可以根据选项有条件地添加托管服务吗?,asp.net-core,dependency-injection,Asp.net Core,Dependency Injection,在ASP.NET Core中,我可以使用IServiceProvider.AddOptions注册选项 但是,我还想使用IServiceProvider.AddHostedService注册托管服务,前提是选项值为true 如何根据选项有条件地添加托管服务?如果我正确理解您的意思,您希望使用从其他文件(如appsettings.json)读取的选项来确定是否添加托管服务。您可以参考以下两种不同的方法: 1.Startup.cs ConfigureServices方法中的appsetting.js
IServiceProvider.AddOptions
注册选项
但是,我还想使用IServiceProvider.AddHostedService
注册托管服务,前提是选项值为true
如何根据选项有条件地添加托管服务?如果我正确理解您的意思,您希望使用从其他文件(如appsettings.json)读取的选项来确定是否添加托管服务。您可以参考以下两种不同的方法: 1.Startup.cs ConfigureServices方法中的appsetting.json读取选项值
var option =Convert.ToBoolean(Configuration.GetSection("Options:value").Value);
if(option)
{
// add hosted services you want
services.AddHostedService<ServiceName>();
}
appsettings.json
您的意思是
IServiceCollection
IServiceProvider
没有这些扩展。问题是我无法控制配置的设置方式(它是一个库),因此我必须依靠从DI容器获取IConfiguration
实例,或者其他一些我还没有看到的例子。@MathiasLykkegaardLorenzen你能在帖子中提供一个更详细的例子来更好地解释这种情况吗。它可能有助于找到潜在的解决方案。我正试图帮助本库的作者解决这个问题:请注意#390中所做的更改。我想看看它们是否可以避免,并以不破坏的方式解决问题。
var configuration = new ConfigurationBuilder()
.AddJsonFile(Path.Combine(Directory.GetCurrentDirectory(), "appsettings.json"))
.Build();
var option = Convert.ToBoolean(configuration.GetSection("Options:value").Value);
"Options":{
"value": true
}