首页 建站常识 详情

什么时候实现.NET Core中的IOptions接口

时间: 2017-11-27 13:24:01 来源:CSDB

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

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

  MemoryCacheOptions : IOptions<MemoryCacheOptions>
        {   
         ISystemClock Clock { ; ; }    
 TimeSpan ExpirationScanFrequency { ; ; } = TimeSpan.FromMinutes();
        MemoryCacheOptions IOptions<MemoryCacheOptions>.Value
        {         {  ; }
        }
        }


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

          SessionOptions
        {       
             CookieName { ; ; } = SessionDefaults.CookieName;     
             CookieDomain { ; ; }   
             CookiePath { ; ; } = SessionDefaults.CookiePath;    
             CookieHttpOnly { ; ; } = ;      
            CookieSecurePolicy CookieSecure { ; ; } = CookieSecurePolicy.None;    
           TimeSpan IdleTimeout { ; ; } = TimeSpan.FromMinutes();
        }


        但自己一直没发现实现 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;
    }


相关新闻

薪酬最高的15门编程语言是否有你会的那种?

AI研发十大热门变成语音

设计模式之观察者模式

0.0779s