.NET Core开发实战(第15课:选项框架:服务组件集成配置的最佳实践)--学习笔记...
15 | 選項框架:服務組件集成配置的最佳實踐
這一節講解如何使用選項框架來處理服務和配置的關系
選項框架的特性:
1、支持單例模式讀取配置
2、支持快照
3、支持配置變更通知
4、支持運行時動態修改選項值
在設計系統的時候需要遵循兩個原則:
1、接口分離原則(ISP),我們的類不應該依賴它不使用的配置
2、關注點分離(SoC),不同組件、服務、類之間的配置不應相互依賴或耦合
建議:
1、為我們的服務設計 XXXOptions
2、使用 IOptions、IOptionsSnapshot、IOptionsMonitor作為服務構造函數的參數
這樣會讓我們更快的實現服務配置的各種能力
源碼鏈接:
https://github.com/witskeeper/geektime/tree/master/samples/OptionsDemo
在定義服務的時候,一般先定義服務接口
namespace OptionsDemo.Services {public interface IOrderService{int ShowMaxOrderCount();}public class OrderService : IOrderService{OrderServiceOptions _options;public OrderService(OrderServiceOptions options){_options = options;}public int ShowMaxOrderCount(){return _options.MaxOrderCount;}}// 代表從配置中讀取的值public class OrderServiceOptions{public int MaxOrderCount { get; set; } = 100;} }接著是服務注冊
public void ConfigureServices(IServiceCollection services) {services.AddSingleton<OrderServiceOptions>();services.AddSingleton<IOrderService, OrderService>(); }接著是控制器的定義
[HttpGet] public int Get([FromServices]IOrderService orderService) {Console.WriteLine($"orderService.ShowMaxOrderCount:{orderService.ShowMaxOrderCount()}");return 1; }啟動程序,輸出如下:
orderService.ShowMaxOrderCount:100如果說我們需要把這個值跟配置綁定,怎么做呢?
首先需要引入 Options 框架
ASP.NET Core 實際上已經默認幫我們把框架引入進來了
命名空間是:Microsoft.Extensions.Options
我們需要修改一下服務的入參
public class OrderService : IOrderService {//OrderServiceOptions _options;IOptionsMonitor<OrderServiceOptions> _options;//public OrderService(OrderServiceOptions options)public OrderService(IOptionsMonitor<OrderServiceOptions> options){_options = options;}public int ShowMaxOrderCount(){//return _options.MaxOrderCount;return _options.Value.MaxOrderCount;} }注冊的時候使用 config 方法,從配置文件讀取
public void ConfigureServices(IServiceCollection services) {//services.AddSingleton<OrderServiceOptions>();services.Configure<OrderServiceOptions>(Configuration.GetSection("OrderService"));services.AddSingleton<IOrderService, OrderService>(); }配置文件
{"OrderService": {"MaxOrderCount": 200} }啟動程序,輸出如下:
orderService.ShowMaxOrderCount:200可以看到,輸出的值為200,說明配置與選項已經完成綁定
服務只依賴了 OrderServiceOptions,并沒有依賴配置框架,也就是說服務只關心配置的值是什么,它并不關心配置的值從哪里來,解除了配置與服務之間的依賴
另外可以為所有的服務分別設計它們的 Options,這樣服務之間的選項配置也都不會互相依賴
總結
以上是生活随笔為你收集整理的.NET Core开发实战(第15课:选项框架:服务组件集成配置的最佳实践)--学习笔记...的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: .NET Core 3.0 即将结束生命
 - 下一篇: 【朝夕技术专刊】WebApi部署多服务器