標籤:基礎 注入 cep nba single filter tor images list
上一節講了中介軟體和依賴注入的基礎,緊接著:
中介軟體是怎麼使用的?使用步驟是什嗎?
只要把中介軟體註冊到管道中就行了,可以藉助Startup對象(DelegateStartup或者ConventionBasedStartup)來完成之外,也可以利用另一個叫做StartupFilter的對象來實現。所謂的StartupFilter是對所有實現了IStartupFilter介面的類型及其對象的統稱。IStartupFilter介面定義了如下一個唯一的方法Configure,該方法的參數next返回的Action<IApplicationBuilder>對象體現了後續StartupFilter和Startup對中介軟體的註冊,而自身對中介軟體的註冊則實現在返回的Action<IApplicationBuilder>對象中。
這就是微軟定義好的介面了,我們只要負責實現他就ok。
我們可以採用服務註冊的方式註冊多個StartupFilter。具體來說,StartupFilter具有如下兩種不同的註冊方式,一種是通過調用WebHostBuilder的ConfigureServices方法以服務的形式註冊所需的StartupFilter,另一種則是將針對StartupFilter的服務註冊實現在啟動類的ConfigureServices方法上。
也就是我們建立.Net Core項目裡面看到的Program.cs和Startup.cs裡面的實現。不同之處在於:StartupFilter註冊的中介軟體會先執行。
//註冊方式1
new WebHostBuilder().ConfigureServices(svcs => svcs.AddSingleton<IStartupFilter, Filter1>().AddSingleton<IStartupFilter, Filter2>())
//註冊方式
public class Startup{
public void ConfigureServices(IServiceCollection svcs){
svcs.AddSingleton<IStartupFilter,Filter1>().AddSingleton<IStartupFilter, Filter2>();
}
}
看上去是很簡單的方式。而我們在代碼中看到的是這樣的:
這是一種擴充的寫法。
這個樣子一看就會很明白實現的原理都是一樣的。
這裡就是實現了IStartupFilter
這裡你也許會有疑問,這個Microsoft.AspNetCore.Hosting是什嗎?通俗一點就是承載。
.Net.Core是承載到CLR上面的。
下一節介紹Microsoft.AspNetCore.Hosting
我們再來看看依賴注入,在上面的中介軟體使用代碼中,就有依賴注入,
就是這個,.Net.Core的依賴注入是通過Microsoft.Extensions.DependencyInjection來實現的,裡面定義了IServiceCollection介面。
具體操作就是添加依賴(Add),描述依賴(Describe),出差依賴(Stroe),解析依賴(Resolve)。提供了一些介面,對外介面就是IServiceCollection介面
內部介面有:
ServiceDescriptor 服務描述,具有服務類型,生命週期
ServiceProvider 解析依賴,依賴注入到容器中,ServiceScope來控制,單一模式,臨時模式,執行個體化模式
ServiceCollection 服務出差,具有Add等等操作,就是一個List<ServiceDescriptor>
CallSiteValidator 調用點也就是請求過來後Invoke會在這裡面調用。
具體實現可以自己看源碼。分析Microsoft.AspNetCore.Hosting也會講解。
記住依賴注入,會構造服務委託鏈。通過UseXXX()來引發調用。
Asp.Net.Core 系列-中介軟體和依賴注入進階篇