的autofac documentation状态工作:Autofac枚举不与类型多个注册或模块
当Autofac被注入
IEnumerable<ITask>
类型的构造符参数也不会寻找供给IEnumerable<ITask>
的成分。相反,容器会查找ITask的所有实现并注入所有实现。
但实际上,它会将每个注册类型添加为已注册的次数。所以,如果你注册类两倍如下:
builder.RegisterType<A>();
builder.RegisterType<A>();
然后你得到两个项目枚举!在单个模块中,这不是问题,因为您显然只需注册一次您的类型。但是如果你有一个由多个模块注册的共享模块(典型的钻石模块依赖关系图),那么你可以在枚举中获得尽可能多的项目,因为共享模块已被其他人注册...
它是一个错误吗? 有没有办法强制枚举为每个实现提供单个项目,正如文档中所述,不再有?
谢谢!我了解现场背后的困境。我不知道类型的注册不是幂等的。不知何故,你是对的,如果你想在类型和实例之间有一个唯一的注册行为,这是有道理的。因此,即使多个模块依赖于它,模块也只能被注册一次。 *所以拇指规则:从不在另一个模块中注册模块!保持一个平坦的模块模型。只在外部例程中注册它们,创建容器* – jeromerg