日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

.NET Core开发实战(第15课:选项框架:服务组件集成配置的最佳实践)--学习笔记...

發(fā)布時(shí)間:2023/12/4 asp.net 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET Core开发实战(第15课:选项框架:服务组件集成配置的最佳实践)--学习笔记... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。