ASP.NET Core 依賴注入:存取 IServiceCollection 以外的服務
在 ASP.NET Core 中,IServiceCollection
對於在依賴注入 (DI) 系統中註冊相依性至關重要。 但是,可能會出現您需要繞過標準注入直接解析服務的情況。
直接從 IServiceCollection 存取服務
IServiceCollection
本身不提供服務解析;其目的僅用於配置 DI 容器。 配置完成後,該容器將轉換為 IServiceProvider
.
注入 ServiceProvider
對於手動服務解決方案,請將 IServiceProvider
注入到您的類別中。 IApplicationBuilder
和 HttpContext
分別透過其 ApplicationServices
和 RequestServices
屬性提供存取。
利用 ServiceProvider
IServiceProvider
提供 GetService(Type type)
依其型別檢索服務。 為了方便起見,請使用 GetService<TService>()
等擴充方法(需要 using Microsoft.Extensions.DependencyInjection;
)。
啟動類別中的服務解決方案
啟動時的依賴注入
Startup
類別可以在其建構函式中接受注入的依賴項,例如 IConfiguration
和 IWebHostEnvironment
(或 3.0 之前版本中的 IHostingEnvironment
)。
在ConfigureServices()
內,利用這些注入的服務來註冊更多依賴項。
啟動時手動解決依賴關係
要解析 內的服務 ConfigureServices()
,請從 IServiceProvider
建立中間 IServiceCollection
。這允許存取截至該點註冊的服務。
利用應用程式服務
在 Configure()
方法中,使用 IApplicationBuilder.ApplicationServices
解析服務。這將存取為應用程式配置的服務。
避免服務定位器反模式
通常不鼓勵直接服務解析,因為它代表「服務定位器」反模式。雖然有時是必要的,但只要可行,就應該避免它,以支援構造函數注入。
以上是如何解析 ASP.NET Core DI 中 IServiceCollection 以外的服務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!