ASP.NET Core应用的7种依赖注入方式
ASP.NET Core框架中的很多核心對象都是通過依賴注入方式提供的,如用來對應用進行初始化的Startup對象、中間件對象,以及ASP.NET Core MVC應用中的Controller對象和View對象等,所以我們可以在定義它們的時候采用注入的形式來消費已經注冊的服務。下面簡單介紹幾種服務注入的應用場景。
00
廣而告之
本篇文章節選自《ASP.NET Core 3框架揭秘》,針對本書的5折優惠還有最后2天,有興趣可以掃描下方二維碼或者從這里入群購買。
01
Startup構造器
目標讀者
構成HostBuilderContext上下文的兩個核心對象(表示配置的IConfiguration對象和表示承載環境的IHostEnvironment對象)可以直接注入Startup構造函數中進行消費。由于ASP.NET Core應用中的承載環境通過IWebHostEnvironment接口表示,IWebHostEnvironment接口派生于IHostEnvironment接口,所以也可以通過注入IWebHostEnvironment對象的方式得到當前承載環境相關的信息。
我們可以通過一個簡單的實例來驗證針對Startup的構造函數注入。如下面的代碼片段所示,我們在調用IWebHostBuilder接口的Startup<TStartup>方法時注冊了自定義的Startup類型。在定義Startup類型時,我們在其構造函數中注入上述3個對象,提供的調試斷言不僅證明了3個對象不為Null,還表明采用IHostEnvironment接口和IWebHostEnvironment接口得到的其實是同一個實例。
class?Program {static?void?Main(){Host.CreateDefaultBuilder().ConfigureWebHostDefaults(builder?=>?builder.UseStartup<Startup>()).Build().Run();} }public?class?Startup {public?Startup(IConfiguration?configuration,?IHostEnvironment??hostingEnvironment,?IWebHostEnvironment?webHostEnvironment){Debug.Assert(configuration?!=?null);Debug.Assert(hostingEnvironment?!=?null);Debug.Assert(webHostEnvironment?!=?null);Debug.Assert(ReferenceEquals(hostingEnvironment,?webHostEnvironment));}public?void?Configure(IApplicationBuilder?app)?{?} }02
Startup.Configure方法
..目標讀者
依賴服務還可以直接注入用于注冊中間件的Configure方法中。如果構造函數注入還可以對注入的服務有所選擇,那么對于Configure方法來說,通過任意方式注冊的服務都可以注入其中,包括通過調用IHostBuilder、IWebHostBuilder和Startup自身的ConfigureServices方法注冊的服務,還包括框架自行注冊的所有服務。
如下面的代碼代碼片段所示,我們分別調用IWebHostBuilder和Startup的ConfigureServices方法注冊了針對IFoo接口和IBar接口的服務,這兩個服務直接注入Startup的Configure方法中。另外,Configure方法要求提供一個用來注冊中間件的IApplicationBuilder對象作為參數,但是對該參數出現的位置并未做任何限制。
class?Program {static?void?Main(){Host.CreateDefaultBuilder().ConfigureWebHostDefaults(builder?=>?builder.UseStartup<Startup>().ConfigureServices(svcs?=>?svcs.AddSingleton<IFoo,?Foo>())).Build().Run();} }public?class?Startup {public?void?ConfigureServices(IServiceCollection?services)?=>?services.AddSingleton<IBar,?Bar>();public?void?Configure(IApplicationBuilder?app,?IFoo?foo,?IBar?bar){Debug.Assert(foo?!=?null);Debug.Assert(bar?!=?null);} }總結
以上是生活随笔為你收集整理的ASP.NET Core应用的7种依赖注入方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020年,我来盘点下微服务架构技术栈
- 下一篇: ASP.NET Core 3.x - 为