You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解析非抽象类实例?依赖注入下接口与具体类解析问题

解决方案

你可以通过分开注册接口和具体类型来实现需求:既让IInterface通过工厂方法解析,又能直接解析CClass而不经过该工厂。

  • 首先保持IInterface到CClass的工厂注册,确保解析接口时会使用你的自定义工厂逻辑
  • 单独注册CClass类型,让容器可以直接解析它(使用默认构造或你指定的其他规则)

示例代码如下:

// 注册IInterface,使用工厂方法生成CClass实例
container.RegisterType<IInterface, CClass>(new InjectionFactory(FactoryMethod));

// 单独注册CClass,允许直接解析该类型(默认使用构造函数创建)
container.RegisterType<CClass>();

这样调用时,两种场景都会按预期工作:

// 通过工厂方法获取IInterface实例
var interfaceImpl = container.Resolve<IInterface>();

// 直接获取CClass实例,不走工厂方法
var directClass = container.Resolve<CClass>();

为什么这样有效?

容器的注册是按目标类型区分的:

  • IInterface的注册规则仅适用于解析IInterface类型的请求
  • CClass的注册(或自动解析)规则仅适用于直接解析CClass的请求

如果你的CClass有带参数的构造函数,或者需要额外的注入配置,你可以在RegisterType<CClass>中添加对应的配置(比如InjectionConstructor、InjectionProperty等),完全独立于IInterface的工厂逻辑。

内容的提问来源于stack exchange,提问作者Denis Fedak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:13:15