zoukankan      html  css  js  c++  java
  • 终于知道什么情况下需要实现.NET Core中的IOptions接口

    自从接触 IOptions 之后,一直纠结这样的问题:自己定义的 Options 要不要实现 IOptions 接口。

    微软有的项目中实现了,比如 Caching 中的 MemoryCacheOptions :

    public class MemoryCacheOptions : IOptions<MemoryCacheOptions>
    {
        public ISystemClock Clock { get; set; }
        public TimeSpan ExpirationScanFrequency { get; set; } = TimeSpan.FromMinutes(1);
        MemoryCacheOptions IOptions<MemoryCacheOptions>.Value
        {
            get { return this; }
        }
    }

    有的项目中就没有实现,比如 Session 中的 SessionOptions :

        public class SessionOptions
        {
            public string CookieName { get; set; } = SessionDefaults.CookieName;
            public string CookieDomain { get; set; }
            public string CookiePath { get; set; } = SessionDefaults.CookiePath;
            public bool CookieHttpOnly { get; set; } = true;
            public CookieSecurePolicy CookieSecure { get; set; } = CookieSecurePolicy.None;
            public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromMinutes(20);
        }

    但自己一直没发现实现 IOptions 究竟有什么用处,于是之前的代码就都没实现,比如之前一篇博文中的 TopClientOptions

    今天在使用 EnyimMemcachedCore ,需要手动 new MemcachedClientOptions 给 MemcachedClientConfiguration 的构造函数传参时,终于明白了实现 IOptions 的真正用处。

    public class MemcachedClientConfiguration : IMemcachedClientConfiguration
    {
        public MemcachedClientConfiguration(
            ILogger<MemcachedClient> logger,
            IOptions<MemcachedClientOptions> optionsAccessor)
        {
        }
    }

    如果 MemcachedClientOptions 不实现 IOptions<MemcachedClientOptions> 接口,就根本无法将 MemcachedClientOptions 的实例传递给 MemcachedClientConfiguration 的构造函数。

    所以,如果完全使用依赖注入,不会出现手动 new 的情况,可以不用实现 IOptions 。否则,必须要实现。保险起见,还是实现一下为好。

    public class MemcachedClientOptions : IOptions<MemcachedClientOptions>
    {
        //..
        public MemcachedClientOptions Value => this;
    }
  • 相关阅读:
    PHP根据蜘蛛和设备进行适配不同界面
    destoon7.0招商地区聚合推送
    Destoon7.0产品栏目地区聚合推送插件
    Destoon7.0百度批量循环推送至百度
    PHP 实现随机图像功能
    PHP中$_SERVER参数用法总结
    关于destoon后台添加自定义功能+前台展示标签调用方法
    分类地区批量推送熊掌号+主动推送代码
    SpringMVC-SimpleDEMO
    SpringMVC工作流程
  • 原文地址:https://www.cnblogs.com/dudu/p/6882110.html
Copyright © 2011-2022 走看看