.NET Core开发实战(第15课:选项框架:服务组件集成配置的最佳实践)--学习笔记...
15 | 選項(xiàng)框架:服務(wù)組件集成配置的最佳實(shí)踐
這一節(jié)講解如何使用選項(xiàng)框架來(lái)處理服務(wù)和配置的關(guān)系
選項(xiàng)框架的特性:
1、支持單例模式讀取配置
2、支持快照
3、支持配置變更通知
4、支持運(yùn)行時(shí)動(dòng)態(tài)修改選項(xiàng)值
在設(shè)計(jì)系統(tǒng)的時(shí)候需要遵循兩個(gè)原則:
1、接口分離原則(ISP),我們的類不應(yīng)該依賴它不使用的配置
2、關(guān)注點(diǎn)分離(SoC),不同組件、服務(wù)、類之間的配置不應(yīng)相互依賴或耦合
建議:
1、為我們的服務(wù)設(shè)計(jì) XXXOptions
2、使用 IOptions、IOptionsSnapshot、IOptionsMonitor作為服務(wù)構(gòu)造函數(shù)的參數(shù)
這樣會(huì)讓我們更快的實(shí)現(xiàn)服務(wù)配置的各種能力
源碼鏈接:
https://github.com/witskeeper/geektime/tree/master/samples/OptionsDemo
在定義服務(wù)的時(shí)候,一般先定義服務(wù)接口
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;} }接著是服務(wù)注冊(cè)
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; }啟動(dòng)程序,輸出如下:
orderService.ShowMaxOrderCount:100如果說(shuō)我們需要把這個(gè)值跟配置綁定,怎么做呢?
首先需要引入 Options 框架
ASP.NET Core 實(shí)際上已經(jīng)默認(rèn)幫我們把框架引入進(jìn)來(lái)了
命名空間是:Microsoft.Extensions.Options
我們需要修改一下服務(wù)的入?yún)?/p>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;} }
注冊(cè)的時(shí)候使用 config 方法,從配置文件讀取
public void ConfigureServices(IServiceCollection services) {//services.AddSingleton<OrderServiceOptions>();services.Configure<OrderServiceOptions>(Configuration.GetSection("OrderService"));services.AddSingleton<IOrderService, OrderService>(); }配置文件
{"OrderService": {"MaxOrderCount": 200} }啟動(dòng)程序,輸出如下:
orderService.ShowMaxOrderCount:200可以看到,輸出的值為200,說(shuō)明配置與選項(xiàng)已經(jīng)完成綁定
服務(wù)只依賴了 OrderServiceOptions,并沒(méi)有依賴配置框架,也就是說(shuō)服務(wù)只關(guān)心配置的值是什么,它并不關(guān)心配置的值從哪里來(lái),解除了配置與服務(wù)之間的依賴
另外可以為所有的服務(wù)分別設(shè)計(jì)它們的 Options,這樣服務(wù)之間的選項(xiàng)配置也都不會(huì)互相依賴
總結(jié)
以上是生活随笔為你收集整理的.NET Core开发实战(第15课:选项框架:服务组件集成配置的最佳实践)--学习笔记...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: .NET Core 3.0 即将结束生命
- 下一篇: 基于.NET下的人工智能系列专题|.NE