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

如何统一注册两类继承IBase的Operation类以通过IBase解析?

如何让继承泛型Base<Generic>和非泛型Base的类型都能通过IBase接口解析?

问题场景

我们的类型继承结构如下:
Base<Generic> : Base : IBase

目前有两类实现类:

  • 类型A:Class1Operation、Class2Operation,均继承自Base<Generic>
  • 类型B:Class3Operation、Class4Operation,均直接继承自Base

已经完成了类型A的Autofac注册:

builder.RegisterAssemblyTypes(assembly)
 .Where(t => t.Name.EndsWith("Operation"))
 .AsClosedTypesOf(typeof(Base<>))
 .InstancePerLifetimeScope();

现在需要找到合适的注册方式处理类型B,最终让两类类型都能通过IBase接口成功解析。

已验证的解决方案

你自己补充的这段注册代码已经完美解决了问题,同时覆盖了类型A和类型B的注册需求:

builder.RegisterAssemblyTypes(persistenceAssembly)
 .Where(t => t.Name.EndsWith("Operation"))
 .AssignableTo<Base>()
 .AsImplementedInterfaces()
 .InstancePerLifetimeScope();

方案说明

这里的关键逻辑点:

  • AssignableTo<Base>():这个筛选条件会同时匹配两类实现——直接继承Base的类型B,以及间接继承Base的类型A(因为Base<Generic>本身继承自Base),确保所有后缀为"Operation"的目标类型都被纳入注册范围。
  • AsImplementedInterfaces():会自动将每个注册类型关联到它所实现的所有接口,自然包含了最上层的IBase接口,这样后续无论是通过IBase解析类型A还是类型B,Autofac都能正确找到对应的实例。

另外补充一点:其实这段代码本身已经可以覆盖你之前的类型A注册逻辑,不过保留原有的类型A注册也不会产生冲突,Autofac会正确处理这些注册关系。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:59:02