在ConfigureServices
中手動解析ASP.NET Core服務
ASP.NET Core 中用於配置依賴注入容器的 ConfigureServices
方法不提供直接解析服務的方法。 要從此方法手動解析服務,需要採用替代方法。
服務提供程序模式
為了解析服務,ASP.NET Core 使用服務提供程序模式。 服務集合構建完成後,它將轉換為 IServiceProvider
實例,允許解析服務。
注入服務提供程序
解析服務的一種方法是將 IServiceProvider
實例注入到 Startup
類的構造函數中。 但是,此方法僅提供對託管層注入的有限的必要服務的訪問。
使用ApplicationServices
在 Configure
方法中,IApplicationBuilder
提供 ApplicationServices
屬性,其中包含一個服務提供程序,可以訪問所有已註冊的服務。
public void Configure(IApplicationBuilder app)
{
var serviceProvider = app.ApplicationServices;
var fooService = serviceProvider.GetService();
}
構建中間服務提供程序
要在 ConfigureServices
方法中解析服務,可以從部分構建的服務集合構建中間服務提供程序。 但是,這僅包括在此之前註冊的服務。
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton();
var sp = services.BuildServiceProvider();
var fooService = sp.GetService();
}
避免手動解析
通常不建議手動解析服務,因為它違反了依賴注入原則。 相反,請使用注入或在 Configure
方法中利用服務提供程序注入。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3