Asp.Net.Core 系列-中介軟體和依賴注入進階篇

來源:互聯網
上載者:User

標籤:基礎   注入   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 系列-中介軟體和依賴注入進階篇

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.