Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.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
C# 为什么IOptionsMonitor<;T>;。一旦改变,你就不会被呼叫?_C#_.net Core_Dependency Injection_.net Core 3.1 - Fatal编程技术网

C# 为什么IOptionsMonitor<;T>;。一旦改变,你就不会被呼叫?

C# 为什么IOptionsMonitor<;T>;。一旦改变,你就不会被呼叫?,c#,.net-core,dependency-injection,.net-core-3.1,C#,.net Core,Dependency Injection,.net Core 3.1,我想让我的.Net Core 3.1应用程序在磁盘上的文件发生更改时自动重新加载其配置,但我在使用选项模式时遇到了问题。我运行我的应用程序,保存对配置文件的更改,但它从未被调用。为什么IOptionsMonitor实例从未调用OnChange处理程序?我错过了什么 Program.cs IHostBuilder创建 Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration(config=>configuration=config.Bui

我想让我的.Net Core 3.1应用程序在磁盘上的文件发生更改时自动重新加载其配置,但我在使用选项模式时遇到了问题。我运行我的应用程序,保存对配置文件的更改,但它从未被调用。为什么IOptionsMonitor实例从未调用OnChange处理程序?我错过了什么

Program.cs IHostBuilder创建

Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(config=>configuration=config.Build())
.ConfigureServices((主机上下文,服务)=>{
var separateConfig=新配置生成器()
.AddJsonFile(“SeparateConfig.json”,可选:false,重载更改:true)
.Build();
服务
.AddSingleton()
.Configure(c=>separateConfig.Bind(c));
})
使用MySeparateConfig的服务

公共类MyMainService
{
公共MyMain服务(IOptionsMonitor配置)
{
如果(config为null)抛出新的ArgumentNullException(nameof(config));
ConfigChangeHandle=config.OnChange(UpdateConfiguration);
//在此处使用config.CurrentValue执行初始配置
}
私有IDisposable ConfigChangeHandle{get;set;}
私有void更新配置(MySeparateConfig)
{
//从未打过电话
}
}

正如@Nkosi在评论中指出的,这一行是问题所在:

//错了
.Configure(c=>separateConfig.Bind(c));
当我用下面的行替换它时,一切都开始正常工作:

//对
.配置(separateConfig);

正如@Nkosi在评论中指出的,这一行是问题所在:

//错了
.Configure(c=>separateConfig.Bind(c));
当我用下面的行替换它时,一切都开始正常工作:

//对
.配置(separateConfig);

单独的配置是否在特定部分?为什么要调用
Bind
?通过特定部分或通过
i配置
<代码>绑定不会根据显示的代码执行您认为它会执行的操作。@不过,该部件工作正常。注入配置实例时(使用
CurrentValue
)会正确填充该实例。不是
Bind
填充实例的属性吗?是的,Bind填充/填充实例,我必须确认它是否也监视更改。@Nkosi感谢您的帮助-我确实需要将整个IConfiguration作为参数传递,而不是我的
Bind
lambda,这解决了我的问题。如果你想把它作为一个答案,我会接受的。不用担心。把对你有用的东西作为自我回答,这样它可以帮助将来可能有类似问题的其他人。单独的配置是否在特定的部分中?为什么要调用
Bind
?通过特定部分或通过
i配置
<代码>绑定不会根据显示的代码执行您认为它会执行的操作。@不过,该部件工作正常。注入配置实例时(使用
CurrentValue
)会正确填充该实例。不是
Bind
填充实例的属性吗?是的,Bind填充/填充实例,我必须确认它是否也监视更改。@Nkosi感谢您的帮助-我确实需要将整个IConfiguration作为参数传递,而不是我的
Bind
lambda,这解决了我的问题。如果你想把它作为一个答案,我会接受的。不用担心。把对你有用的东西作为一个自我回答,这样它可以帮助将来可能有类似问题的其他人。