如何统一注册两类继承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
相关产品推荐
相关产品推荐

