终于知道什么情况下需要实现.NET Core中的IOptions接口
2017-05-20 15:12
337 查看
自从接触 IOptions 之后,一直纠结这样的问题:自己定义的 Options 要不要实现 IOptions 接口。
微软有的项目中实现了,比如 Caching 中的 MemoryCacheOptions :
有的项目中就没有实现,比如 Session 中的 SessionOptions :
但自己一直没发现实现 IOptions 究竟有什么用处,于是之前的代码就都没实现,比如之前一篇博文中的 TopClientOptions 。
今天在使用 EnyimMemcachedCore ,需要手动 new MemcachedClientOptions 给 MemcachedClientConfiguration 的构造函数传参时,终于明白了实现 IOptions 的真正用处。
如果 MemcachedClientOptions 不实现 IOptions<MemcachedClientOptions> 接口,就根本无法将 MemcachedClientOptions 的实例传递给 MemcachedClientConfiguration 的构造函数。
所以,如果完全使用依赖注入,不会出现手动 new 的情况,可以不用实现 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; }
相关文章推荐
- 终于知道什么情况下需要实现.NET Core中的IOptions接口
- 抱歉,没分了!!!请教linux下,用C/C++编程,如何知道我要实现某一功能需要用到什么函数
- 抱歉,没分了!!!请教linux下,用C/C++编程,如何知道我要实现某一功能需要用到什么函数
- 中国传统日历 在编程中如何实现 需要注意什么
- (转)在.NET程序运行过程中,什么是堆,什么是栈?什么情况下会在堆(栈)上分配数据?它们有性能上的区别吗?“结构”对象可能分配在堆上吗?什么情况下会发生,有什么需要注意的吗?
- 为虚函数,什么情况下需要将析构函数定义为虚函数?
- 完成例程在什么情况下需要调用 IoMarkIrpPending
- 在什么情况下需要开启“反交织”模式?
- MVC如何实现,优点和缺点是什么(面试必考,需要弄懂)
- 摘录:什么情况下数据需要写回磁盘
- 用cocos2d3.0写一个srpg游戏-需要实现什么
- 实现ERP系统需要什么人才
- 架构之反射实现源代码(不知道要干什么确需要知道能干什么)
- 我是使用笔记本的,请问贺工还有什么配件需要购买吗?如何实现在线仿真调试呢? - 上海嵌入式家园 贺工
- 什么情况下需要使用VPS
- 实现ERP系统需要什么人才
- 什么情况需要 if (log.isDebugEnabled())
- 为什么析构函数可以为虚函数,什么情况下需要将析构函数定义为虚函数?
- 终于知道自己需要什么了
- haslayout 以及怎样触发haslayout? 在什么情况下需要触发haslayout