6.使用选项框架解耦服务与配置

一、特性

支持单例模式读取配置
支持快照
支持配置变更通知
支持运行时动态修改选项值
 
二、设计原则
接口分离原则 (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>();

 

 
posted @ 2020-04-07 13:44  前线码农  阅读(197)  评论(0编辑  收藏  举报