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這兩個接口。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM