首頁 >後端開發 >C++ >如何解析 ASP.NET Core DI 中 IServiceCollection 以外的服務?

如何解析 ASP.NET Core DI 中 IServiceCollection 以外的服務?

Linda Hamilton
Linda Hamilton原創
2025-01-17 08:51:13729瀏覽

How Can I Resolve Services in ASP.NET Core DI Beyond the IServiceCollection?

ASP.NET Core 依賴注入:存取 IServiceCollection 以外的服務

在 ASP.NET Core 中,IServiceCollection 對於在依賴注入 (DI) 系統中註冊相依性至關重要。 但是,可能會出現您需要繞過標準注入直接解析服務的情況。

直接從 IServiceCollection 存取服務

IServiceCollection本身不提供服務解析;其目的僅用於配置 DI 容器。 配置完成後,該容器將轉換為 IServiceProvider.

注入 ServiceProvider

對於手動服務解決方案,請將 IServiceProvider 注入到您的類別中。 IApplicationBuilderHttpContext 分別透過其 ApplicationServicesRequestServices 屬性提供存取。

利用 ServiceProvider

IServiceProvider 提供 GetService(Type type) 依其型別檢索服務。 為了方便起見,請使用 GetService<TService>() 等擴充方法(需要 using Microsoft.Extensions.DependencyInjection;)。

啟動類別中的服務解決方案

啟動時的依賴注入

Startup 類別可以在其建構函式中接受注入的依賴項,例如 IConfigurationIWebHostEnvironment(或 3.0 之前版本中的 IHostingEnvironment)。

ConfigureServices()內,利用這些注入的服務來註冊更多依賴項。

啟動時手動解決依賴關係

要解析 內的服務 ConfigureServices(),請從 IServiceProvider 建立中間 IServiceCollection。這允許存取截至該點註冊的服務。

利用應用程式服務

Configure() 方法中,使用 IApplicationBuilder.ApplicationServices 解析服務。這將存取為應用程式配置的服務。

避免服務定位器反模式

通常不鼓勵直接服務解析,因為它代表「服務定位器」反模式。雖然有時是必要的,但只要可行,就應該避免它,以支援構造函數注入。

以上是如何解析 ASP.NET Core DI 中 IServiceCollection 以外的服務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn