在 ASP.NET Core MVC 中,依賴注入 (DI) 機制用於管理應用程式相依性的建立和生命週期。 ConfigureServices
方法通常用於註冊依賴項,但它最初只建立一個 IServiceCollection
,該集合充當 DI 容器的藍圖。
要手動解析服務實例,我們需要取得一個 IServiceProvider
,它包含完全組合的容器。有幾種方法可以實現這一點:
將服務注入 Startup
類別的建構子允許在 ConfigureServices
方法中直接存取內建服務,例如 IConfiguration
:
<code class="language-csharp">public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { // 在此处使用 Configuration } }</code>
在 Configure
方法中,IApplicationBuilder
提供對 IServiceProvider
的直接存取:
<code class="language-csharp">public void Configure(IApplicationBuilder app) { var serviceProvider = app.ApplicationServices; var hostingEnv = serviceProvider.GetService<IWebHostEnvironment>(); }</code>
要在 ConfigureServices
中直接解析依賴項,需要使用中間服務提供者:
<code class="language-csharp">public void ConfigureServices(IServiceCollection services) { services.AddSingleton<IFooService, FooService>(); var sp = services.BuildServiceProvider(); var fooService = sp.GetService<IFooService>(); }</code>
通常不建議手動解析依賴項(服務定位器),因為它可能會降低可維護性和可測試性。盡可能優先註入依賴項。
以上是如何解析ConfigureServices中的ASP.NET Core DI實例?的詳細內容。更多資訊請關注PHP中文網其他相關文章!