ASP.NET Core 5 MVC封装DryIoc时IHost未注册错误解决问询
需要提供的代码片段
- 自定义
IServiceProviderFactory实现的完整代码,尤其是CreateBuilder、CreateServiceProvider两个核心方法的实现逻辑 - 自定义
DIContainer封装类的核心代码,确认其是否持有DryIoc 4.7.5的IContainer原生实例、是否实现了IServiceProvider相关接口 Program.cs中Host创建、DryIoc工厂注入的完整代码Startup.cs(如果使用)中ConfigureServices方法的实现,以及DryIoc容器配置相关的代码
解决思路
IHost未注册报错的本质是ASP.NET Core内置服务没有被正确合并到自定义DryIoc容器中,导致Host构建时找不到自身依赖的服务。对应优化点如下:
- 不要直接返回自定义
DIContainer作为CreateBuilder的返回值,兼容方案为:DIContainer内部持有DryIoc原生IContainer实例,CreateBuilder方法返回原生IContainer作为构建器,最后在CreateServiceProvider方法中将原生容器的ServiceProvider绑定到DIContainer对外暴露的解析逻辑上,既保留原有封装,又符合DryIoc适配ASP.NET Core的接口规范。 - 必须调用DryIoc官方适配包的
Populate方法,将IServiceCollection中注册的所有ASP.NET Core内置服务(包括IHost相关服务)填充到DryIoc容器中,漏写该步骤会直接出现内置服务找不到的报错。 - 确认
Program.cs中是通过UseServiceProviderFactory方法注入自定义工厂实现,而非手动替换ServiceProvider,避免破坏Host构建流程。 - DryIoc 4.7.5对ASP.NET Core 5的适配逻辑与3.1完全兼容,无需额外调整适配规则,仅需确保容器配置时开启了
WithAspNetCore()相关配置开关,兼容ASP.NET Core的服务解析规则。
内容的提问来源于stack exchange,提问作者TimH
相关产品推荐
相关产品推荐

