当前位置: 首页 > news >正文

建筑公司网站的目标用户深圳燃气公司电话号码

建筑公司网站的目标用户,深圳燃气公司电话号码,企业网站改版新闻,免费域名申请网站大全下载前面我们讲到 IOptions 和 IOptionsSnapshot#xff0c;他们两个最大的区别便是前者注册的是单例模式#xff0c;后者注册的是 Scope 模式。而 IOptionsMonitor 则要求配置源必须是可监听的#xff0c;用来实现 Options 实例的自动更新#xff0c;并对外提供了 OnChage 事件…前面我们讲到 IOptions 和 IOptionsSnapshot他们两个最大的区别便是前者注册的是单例模式后者注册的是 Scope 模式。而 IOptionsMonitor 则要求配置源必须是可监听的用来实现 Options 实例的自动更新并对外提供了 OnChage 事件给我们更多的控制权。 IOptionsMonitor public interface IOptionsMonitorout TOptions {TOptions CurrentValue { get; }      TOptions Get(string name);      IDisposable OnChange(ActionTOptions listener); } IOptionsMonitor 与 IOptionsSnapshot 类似都提供了根据指定名称获取 Options 的功能并多了一个 OnChange 方法。而它的默认实现者是 OptionsMonitor。 public static IServiceCollection AddOptions(this IServiceCollection services){...services.TryAdd(ServiceDescriptor.Singleton(typeof(IOptions), typeof(OptionsManager)));services.TryAdd(ServiceDescriptor.Scoped(typeof(IOptionsSnapshot), typeof(OptionsManager)));services.TryAdd(ServiceDescriptor.Singleton(typeof(IOptionsMonitor), typeof(OptionsMonitor)));... } OptionsMonitor public class OptionsMonitorTOptions : IOptionsMonitorTOptions where TOptions : class, new() {        private readonly IOptionsMonitorCacheTOptions _cache;        private readonly IOptionsFactoryTOptions _factory;        private readonly IEnumerableIOptionsChangeTokenSourceTOptions _sources;        internal event ActionTOptions _onChange;      public OptionsMonitor(IOptionsFactoryTOptions factory, IEnumerableIOptionsChangeTokenSourceTOptions sources, IOptionsMonitorCacheTOptions cache)    {_factory factory;_sources sources;_cache cache;             foreach (var source in _sources){ChangeToken.OnChange(() source.GetChangeToken(),() InvokeChanged());}}                  public TOptions CurrentValue { get Get(Options.DefaultName); }           public virtual TOptions Get(string name) _cache.GetOrAdd(name, () _factory.Create(name));           private void InvokeChanged()    {...}             public IDisposable OnChange(ActionTOptions listener)    {...} } 首先看构造函数中的三个参数其中 IOptionsFactory 和 IOptionsMonitorCache 在上一章已讲过而第二个 IOptionsChangeTokenSource 则是用来实现对配置源的监听 public interface IOptionsChangeTokenSourceout TOptions {         IChangeToken GetChangeToken();       string Name { get; } } 通过 GetChangeToken 获取 ChangeToken , 从而注册其 InvokeChanged 方法 private void InvokeChanged(){ _cache.TryRemove(Options.DefaultName);    var options CurrentValue;     if (_onChange ! null){_onChange.Invoke(options);} } 首先移除 Options 缓存再通过 IOptionsFactory 重新创建 Options然后调用 _onChange 事件。 而 OnChange 方法则用来注册 _onChange 事件 public IDisposable OnChange(ActionTOptions listener){    var disposable new ChangeTrackerDisposable(this, listener);_onChange disposable.OnChange;       return disposable; } 这里又使用了一个 OptionsMonitore 的包装类用来实现事件的注销 internal class ChangeTrackerDisposable : IDisposable{    private readonly ActionTOptions _listener;      private readonly OptionsMonitorTOptions _monitor;     public ChangeTrackerDisposable(OptionsMonitorTOptions monitor, ActionTOptions listener)    {_listener listener;_monitor monitor;}        public void OnChange(TOptions options) _listener.Invoke(options);            public void Dispose() _monitor._onChange - OnChange; } 再去看一下 IConfigurationChangeTokenSource 的实现 ConfigurationChangeTokenSource IConfigurationChangeTokenSource 的默认实现类便是 ConfigurationChangeTokenSource : public static IServiceCollection ConfigureTOptions(this IServiceCollection services, string name, IConfiguration config)    where TOptions : class{...services.AddSingletonIOptionsChangeTokenSourceTOptions(new ConfigurationChangeTokenSourceTOptions(name, config));... } ConfigurationChangeTokenSource 构造函数要求传入 IConfiguration其而 ChangeToken 的获取便是通过 IConfiguration 来得到的 public interface IConfiguration{...    IChangeToken GetReloadToken();... }public class ConfigurationChangeTokenSourceTOptions : IOptionsChangeTokenSourceTOptions {    private IConfiguration _config;    public ConfigurationChangeTokenSource(IConfiguration config) : this(Options.DefaultName, config) { }     public ConfigurationChangeTokenSource(string name, IConfiguration config)    {           if (config null){                 throw new ArgumentNullException(nameof(config));}_config config;}              public string Name { get; }              public IChangeToken GetChangeToken()    {        return _config.GetReloadToken();} } 因此要想使用 IOptionsMonitor必须要使用 IConfiguration 进行注册才可以当然你也可以实现自己的 ChangeToken。 总结 本章介绍了 IOptionsMonitor 的实现通过 IConfiguration 所提供的 ChangeToken 来注册监听事件对其 CurrentValue 进行更新。到此ASP.NET Core 中的 Options 源码也就分析完了其本身比较简单并没有太多东西。更具体的可以去 Github 上看完整的源码而 .NET Core 才刚刚发布了 Preview2 版本随时可能会有大的变化而我也会保持更新通过观察每次的变化也能学到更多的编程思想也是一件很快乐的事。 相关文章  ASP.NET Core 源码学习之 Options[1]:ConfigureASP.NET Core 源码学习之 Options[2]:IOptionsASP.NET Core 源码学习之 Options[3]:IOptionsSnapshotASP.NET Core MVC 源码学习详解 Action 的匹配asp.net core源码飘香从Hosting开始asp.net core源码飘香Configuration组件asp.net core源码飘香Options组件asp.net core源码飘香Logging组件 原文地址http://www.cnblogs.com/RainingNight/p/strongly-typed-options-ioptions-monitor-in-asp-net-core.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注
http://www.yutouwan.com/news/408840/

相关文章:

  • 网站管理助手建站教程流量打不开网站怎么办
  • 二手房交易网站开发源码泊头 网站优化
  • 排名前十的网站在百度上做公司网站得多少钱
  • 程序员自己做网站怎么赚钱青海网站建设费用价格
  • 网站开发前端框架成都网站制作和建设
  • 宝山湖网站建设小程序商城多少钱
  • 网站推广活动策划做手机网站价格
  • 手机网站怎么做301wordpress中实战视频
  • 织梦网站密码忘记鞍山网站哪家好
  • 深圳网站设计公司费用大概多少建个网站用多少钱
  • 建站平台塔山双喜哪里可以在百度做网站
  • 已备案个人网站做淘宝客绚丽网站
  • 杭州企业如何建网站wordpress加导航栏视频
  • 肥西县住房和城乡建设局网站jsp做的网站难吗
  • 张家港网站制作营销策略ppt
  • 公司建网站的详细步骤网站公司怎么做推广方案
  • 厦门知名网站建设网站建设工作安排方案
  • 老外做的汉语网站logo图案大全
  • 重庆网站建设挑夹夹虫快速搭建网站视频教程
  • 门户网站建设关键点网站建设涉及的法律
  • 微信支付网站开发网站开发课程设计说明书
  • 哪家微信网站建设好做it题的网站
  • 织梦网站模板如何安装教程视频资质做网站需要用到什么
  • 高端的佛山网站建设价格如何建立外贸网站
  • 怎么把凡科网里做的网站保存成文件富锦网站制作
  • 中山最好的网站建设公司哪家好烟台做外贸网站
  • 酒店网站策划书商城版网站制作
  • 网站设计所用到的技术合肥专业网站优化费用
  • 衡水做网站技术怎么在高德地图上添加自己的店铺
  • 用网站源码做网站旅游类网站建设方案