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

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

public class MemoryCacheOptions : IOptions<MemoryCacheOptions>
{
public ISystemClock Clock { get; set; }
public TimeSpan ExpirationScanFrequency { get; set; } = TimeSpan.FromMinutes();
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();
}

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

最新文章

  1. Java特性之多态父类与子类之间的调用
  2. 【noip 2016】 蚯蚓(earthworm)
  3. 性能分析神器VisualVM
  4. keil 的头文件 .
  5. FastDFS安装配置
  6. python使用mysqldb连接数据库操作方法示例详解
  7. wget命令解析
  8. UVa 340 Master-Mind Hints (优化查找&amp;复制数组)
  9. Python学习笔记——基础篇【第五周】——模块
  10. NOIP-Vigen&#232;re密码
  11. GWAS条件分析(conditional analysis)
  12. linux中python3安装和使用
  13. excle 内部 超链接(锚点)
  14. POJ3111 K Best 2017-05-11 18:12 31人阅读 评论(0) 收藏
  15. 月经贴:当落魄的.NET基佬遇上不可一世的JAVA派 developer
  16. Orleans介绍
  17. [Asp.net mvc]Asp.net mvc 使用Json传递数据
  18. 简单的搭mysql开发环境
  19. India and China Origins---hdu5652(二分 + bfs)或者(并查集)
  20. IE的if条件判断

热门文章

  1. sublime text3怎么安装Package Control
  2. Redis相关技巧
  3. 把上传过来的多张图片拼接转为PDF的实现代码
  4. flink 获取上传的Jar源码
  5. sublime text 3 环境变量的配置、安装Package Control、汉化和注册
  6. Android开发(十六)——Android listview onItemClick事件失效的原因
  7. Kubernetes集群部署之二CA证书制作
  8. java-信息安全(九)-基于DH,非对称加密,对称加密等理解HTTPS
  9. 提升linux下TCP服务器并发连接数(limit)
  10. [Algorithm] Warm-up puzzles