1. 程式人生 > >Asp.Net Core Options模式的知識總結

Asp.Net Core Options模式的知識總結

Options模式是Asp.Net Core中用於配置的一種模式,它利用了系統的依賴注入,並且還可以利用配置系統。它使我們可以採用依賴注入的方法直接使用繫結的一個POCO物件,這個POCO物件就叫做Options物件。也可以叫做配置物件。

Options模式中的核心物件如下:

IOptions<TOptins>:非具名,它代表了系統中同一種類的POCO配置物件。在系統中是singleton,應用級別的注入。

IOptionsSnapshot<TOptions>:具名,它用名稱代表了某一個具體的配置物件。從名字可以看出它能實時的捕獲到配置物件的變化。在系統中是Scope,請求級別的注入。

IOptionsFactory<TOptions>:工廠,建立TOptions的工廠。在系統中是Transient。即用即棄。

IOptionsMonitorCache<TOptinos>:快取,工廠建立的物件會被放到快取中。在系統中是Singleton,應用級別的注入。

OptionsManager<TOptions>

這個類是IOptinos和IOptionsSnapshot這兩個介面的預設實現。

這個類的建構函式需要傳入IOptionsFactory<TOptions>。隨後,還會在內部自建立一個實現了IOptinsMonitorCache的物件(OptionsCache)。OptionsManager本身是用來提供TOptions例項的,它內部又依賴IOptionsFactory這個工廠物件來建立物件。factory建立好的物件放到它內部的自建立的這個快取上面。以獨佔的方式來對Toptions物件進行快取。

原理上,IOptions表示的是不具名物件,IOptionsSnapshot介面表示的具名物件,但是在他們兩個的實現OptionsManager中都是呼叫的同一個方法,只不過Ioptions提供了一個空字串來表示不具名。在OptionsManager內部最終會呼叫Get方法來獲取TOptions物件.

IOptinsFactory

預設的實現是OptionsFactory。介面有一個Create方法,接受一個string name引數,OptionsFactory提供Toptions物件總的來說有兩個過程,TOptions的例項化和TOptinos的初始化。例項化的過程就是直接new 了一個TOptions物件,因為在介面約束裡面對TOptions有new()約束,所以可以直接new出來這個物件,而初始化的過程是由三個介面來提供實現的,這三個介面分別是

①IConfigureOptions<in TOptions>

②IConfigureNamedOptions<in TOptins>:IConfigureOptions<TOptions> 注:它繼承了IConfigureOptions介面。

③IPostConfigureOptions<in Toptions>

初始化的順序為先執行①和②,再執行③。

這三個介面是在Service.Configure<TOptions>(this IServiceCollection services,string name,Action<Toptions> configureOptions) where TOptions:class這個擴充套件方法中進行配置的,最終,會呼叫services.AddSingleton<IConfigureOptions<Toptions>>(new ConfigureNamedOptions<Toptions>(name,configureOptions));這個方法,註冊一個應用級別的服務。ConfigureNamedOptions實現了IConfigureOptions和IConfigureNamedOptions這兩個介面。