首页 > 后端开发 > C++ > 如何解析 ASP.NET Core DI 中 IServiceCollection 之外的服务?

如何解析 ASP.NET Core DI 中 IServiceCollection 之外的服务?

Linda Hamilton
发布: 2025-01-17 08:51:13
原创
728 人浏览过

How Can I Resolve Services in ASP.NET Core DI Beyond the IServiceCollection?

ASP.NET Core 依赖注入:访问 IServiceCollection 之外的服务

在 ASP.NET Core 中,IServiceCollection 对于在依赖注入 (DI) 系统中注册依赖项至关重要。 但是,可能会出现您需要绕过标准注入直接解析服务的情况。

直接从 IServiceCollection 访问服务

IServiceCollection本身不提供服务解析;其目的仅用于配置 DI 容器。 配置完成后,该容器将转换为 IServiceProvider.

注入 ServiceProvider

对于手动服务解决方案,请将 IServiceProvider 注入到您的类中。 IApplicationBuilderHttpContext 分别通过其 ApplicationServicesRequestServices 属性提供访问。

利用 ServiceProvider

IServiceProvider 提供 GetService(Type type) 根据其类型检索服务。 为了方便起见,请使用 GetService<TService>() 等扩展方法(需要 using Microsoft.Extensions.DependencyInjection;)。

启动类中的服务解决方案

启动时的依赖注入

Startup 类可以在其构造函数中接受注入的依赖项,例如 IConfigurationIWebHostEnvironment(或 3.0 之前版本中的 IHostingEnvironment)。

ConfigureServices()内,利用这些注入的服务来注册更多依赖项。

启动时手动解决依赖关系

要解析 内的服务 ConfigureServices(),请从 IServiceProvider 创建中间 IServiceCollection。这允许访问截至该点注册的服务。

利用应用程序服务

Configure() 方法中,使用 IApplicationBuilder.ApplicationServices 解析服务。这将访问为应用程序配置的服务。

避免服务定位器反模式

通常不鼓励直接服务解析,因为它代表“服务定位器”反模式。虽然有时是必要的,但只要可行,就应该避免它,以支持构造函数注入。

以上是如何解析 ASP.NET Core DI 中 IServiceCollection 之外的服务?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板