Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 我可以根据选项有条件地添加托管服务吗?_Asp.net Core_Dependency Injection - Fatal编程技术网

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

在ASP.NET Core中,我可以使用
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
 }