在ASP.NET Core的ConfigureServices
方法中手動解析服務
ASP.NET Core使用IServiceCollection
介面建構依賴注入(DI)容器。建置完成後,它被組合成一個IServiceProvider
實例,允許您解析服務。本文指導如何在ConfigureServices
方法中手動解析實例。
注入依賴項
ConfigureServices
方法不允許服務注入,因此您可以將服務注入到Startup
類別的建構函式中,例如IConfiguration
、IWebHostEnvironment
和ILoggerFactory
。
<code class="language-csharp">public Startup(IConfiguration configuration) => Configuration = configuration; public void ConfigureServices(IServiceCollection services) => services.AddScoped<IFooService>();</code>
在Configure()
中手動解析依賴項
您可以使用IApplicationBuilder
的ApplicationServices
屬性在Configure()
方法中手動解析服務:
<code class="language-csharp">public void Configure(IApplicationBuilder app) { var serviceProvider = app.ApplicationServices; var fooService = serviceProvider.GetService<IFooService>(); }</code>
在ConfigureServices()
中手動解析依賴項
要在ConfigureServices
中解析服務,請使用BuildServiceProvider()
建立一個中間IServiceProvider
來存取到那時為止註冊的服務:
<code class="language-csharp">public void ConfigureServices(IServiceCollection services) { services.AddSingleton<IFooService>(); var sp = services.BuildServiceProvider(); var fooService = sp.GetService<IFooService>(); }</code>
警告:
避免在ConfigureServices
中解析服務,因為它應該專注於配置應用程式服務。考慮手動將值從IConfiguration
綁定到實例,或使用AddSingleton
/AddScoped
/AddTransient
的重載來延遲建立實例。
手動解析服務(服務定位器)是一種反模式,應該謹慎使用。
以上是如何在 ASP.NET Core 的「ConfigureServices」方法中手動解析服務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!