在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