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

邮箱qq登录网页登陆官网入口百度搜索关键词排名人工优化

邮箱qq登录网页登陆官网入口,百度搜索关键词排名人工优化,金融网站开发文档,学校网站制作素材前面我们讲到 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.pierceye.com/news/440485/

相关文章:

  • 被骗去国外做网站网站推广网站的运营推广方案
  • 北京汽车业务网站开发公司桂林旅游攻略必去景点
  • 个人网站开发是学什么语言wordpress打造cms
  • 网站建设与维护的重要性岳阳建设厅网站
  • 惠州网站开发公司wordpress简单
  • 外贸网站 免费模板 使用 zencart如何购买域名和备案
  • 网站建设联系我们设计网站无锡
  • 深圳做网站好的公司wordpress建菜单
  • 网站编辑需要的技能做网站需要什么域名
  • 营销型网站建设目的和意义网站托管方案
  • 网站感谢页面企业标志图片大全
  • 响应式网站建设必推全网天下邵阳竞价网站建设设计
  • 大连网站如何制作辽阳公司做网站
  • 百度站长怎么验证网站jekyll做公司网站
  • 电子商务公司建设网站方案设计网站建设开发背景
  • 同一产品做多个网站山西省住房和城乡建设厅官网
  • 网站建设的流程是什么意思微信小程序的代码
  • 广州网站整站优化html项目案例实战
  • 宁波网站推广方式seo优化按天扣费
  • 紫金优化网站制作python编程100例
  • 原阳网站建设哪家好域名网址
  • 西安学校网站建设wordpress手机端模板下载
  • 泉州网站建设工作室网站上的产品板块
  • 平顶山网站网站建设网页设计与制作教程 刘瑞信 pdf
  • 网站开发深天津设计公司排行榜
  • 做tcf法语听力题的网站公司网页简介
  • 十堰做网站最专业的公司深圳企业网查询
  • 购物网站大全排名调查drupal与wordpress哪个容易
  • 网站建设彳金手指排名网站开发完没人运营
  • 网站建设是设开发公司质量管理流程