一、特性
支持单例模式读取配置
支持快照
支持配置变更通知
支持运行时动态修改选项值
二、设计原则
接口分离原则 (ISP) ,我们的类不应该依赖它不使用的配置
关注点分离 (SoC),不同组件、服务、类之间的配置不应相互依赖或耦合
三、建议
为我们的服务设计 XXXOptions
使用 IOptions<XXXOptions> 、 IOptionsSnapshot <XXXOptions> 、
IOptionsMonitor <XXXOptions> 作为服务构造函数的参数
四、代码
1.定义接口
public interface IOrderService { int ShowMaxOrderCount(); }
2.实现接口
public class OrderServiceOptions { public int MaxOrderCount { get; set; } = 100; } public class OrderService : IOrderService { IOptions<OrderServiceOptions> _options; //以Options的方式传入配置 public OrderService(IOptions<OrderServiceOptions> options) { _options = options; } public int ShowMaxOrderCount() { return _options.Value.MaxOrderCount; } }
3.服务注册
services.Configure<OrderServiceOptions>(Configuration.GetSection("OrderService")); //从配置文件中获取配置信息,也可以从其它方式获取配置信息 services.AddSingleton<IOrderService, OrderService>();