如何解析非抽象类实例?依赖注入下接口与具体类解析问题
解决方案
你可以通过分开注册接口和具体类型来实现需求:既让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
相关产品推荐
相关产品推荐

