ASP.NET Core的配置(5):配置的同步[ 实例篇]
ConfigurationBuilder在生成以Configuration对象的时候会利用注册其中的ConfigurationProvider加载原始的配置数据,那么一旦配置源中的数据发生变化,应用程序中的使用的配置信息如何与之同步呢?如果需要在应用程序中实现对配置信息的实施同步,就需要对原始配置数据的进行监控,并在数据改变的时候重新加载配置数据。除此之外,重新加载的配置需要应用到程序中,我们必然需要一种通知机制。 为了让读者朋友们对配置同步机制在具体项目中的应用有个感官认识,我们先通过一个简单的实例来演示如何实现配置数据的实时同步。我们采用一个INI文件作为配置源,通过实施监控这个文件第一时间感知到文件内容的变换。一旦原始配置文件的内容发生改变,应用程序将重新加载配置,并通过注册的回掉操作应用新的配置。 我们先创建一个ASP.NET Core控制台应用并在project .json文件中添加相应的依赖。由于对原始配置文件的变换的监控相关的API实现在“Microsoft.Extensions.Configuration.FileProviderExtensions”这个NuGet包中,我们需要按照如下方式添加针对它的依赖。 1: {
2: ...
3:?
4: "dependencies": { 5: "Microsoft.Extensions.Configuration.Ini" : "1.0.0-rc1-final", 6: "Microsoft.Extensions.Configuration.Binder" : 7: "Microsoft.Extensions.Configuration.FileProviderExtensions" : "1.0.0-rc1-final" 8: },1)'> 9: } 假设我们需要通过配置来当前应用使用的线程池的容量,这样的设置需要根据当前的负载进行调整,所以需要很高的时效性,我们希望一旦修改了INI文件的配置,应用程序中针对线程池的相关设置可以立即生效。简单起见,我们仅仅定义MinThreads 和MaxThreads这两个分别决定线程池容量区间的配置项,如下所示的ThreadPoolSettings 是对应的Options类型。 2: {
4: int MaxThreads { get; set; }
6: { 8: } class Program 4:? 7: IConfigurationRoot configuration = new ConfigurationBuilder()
9: .Build() 10: .ReloadOnChanged("Settings.ini"); 11:?
12: callbackRegistration = configuration.GetReloadToken().RegisterChangeCallback(OnSettingChanged,configuration);
13:?
14: Console.Read();
15: }
16:?
17: void OnSettingChanged(object state) 18: {
19: callbackRegistration?.Dispose();
20: IConfiguration configuration = (IConfiguration)state;
21: Console.WriteLine(configuration.Get<ThreadPoolSettings>());
22: callbackRegistration = configuration.GetReloadToken().RegisterChangeCallback(OnSettingChanged,state);
23: }
24: }
注册的回掉操作实现在OnSettingsChanged方法中,方法的参数是在调用RegisterChangeCallback方法是指定的ConfigurationRoot对象,我们在该方法中将它承载的配置绑定为ThreadPoolSettings对象并将相关的信息打印在控制台上。由于ConfigurationRoot每次重新加载的时候都会生成新的ChangeToken,所以我们在OnSettingsChanged方法中重复地调用RegisterChangeCallback方法进行回掉注册。现在我们直接运行这段程序,然后认为地修改存储原始配置数据的INI文件。如上图所示,当每次我们修改这个INI文件的时候,应用程序的配置将实时地与之同步。 ? ASP.NET Core的配置(1):读取配置信息 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 强大的html帮助程序,具有不同的get和post模
- asp.net-mvc – 使用Ninject注册到自定义成员资格提供程序
- asp.net-mvc – 在ASP.NET MVC中创建报表的最佳方式
- asp.net-mvc – 在ascx文件中使用Html.RenderPartial()
- 如何检查ASP.Net中客户端(JavaScript)的Page.Validate()?
- asp.net – 值不能为null.参数名称:items(DrodownList)
- ASP.NET 2.0和4.0似乎在Forms身份验证中以不同方式处理根UR
- asp.net-mvc – Asp.Net MVC中设计师友好的视图
- asp.net – 在C#后面的代码中实现javascript确认框
- asp.net-mvc – MVC脚手架 – 参考程序集中缺少类