在ConfigureServices
中手動解析ASP.NET Core服務
ASP.NET Core 中用於配置依賴注入容器的 ConfigureServices
方法不提供直接解析服務的方法。 若要從此方法手動解析服務,需要採用替代方法。
服務提供者模式
為了解析服務,ASP.NET Core 使用服務提供者模式。 服務集合建置完成後,它將轉換為 IServiceProvider
實例,允許解析服務。
注入服務提供者
解析服務的一種方法是將 IServiceProvider
實例注入到 Startup
類別的建構子中。 但是,此方法僅提供對託管層注入的有限的必要服務的存取。
使用ApplicationServices
在 Configure
方法中,IApplicationBuilder
提供 ApplicationServices
屬性,其中包含一個服務提供程序,可以存取所有已註冊的服務。
<code class="language-csharp">public void Configure(IApplicationBuilder app) { var serviceProvider = app.ApplicationServices; var fooService = serviceProvider.GetService<IFooService>(); }</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>
避免手動解析
通常不建議手動解析服務,因為它違反了依賴注入原則。 相反,請使用注入或在 Configure
方法中利用服務提供者註入。
以上是如何在「ConfigureServices」中手動解析 ASP.NET Core 服務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!