对于覆盖/替换类型注册,两个框架都使用“最后一次注册获胜”。然而,对于集合(同一接口的多个实现),在两个框架中,集合都被添加到,永远不会完全覆盖/替换为新集合:
For<IService>().Use<Service1>();
For<IService>().Use<Service2>();
GetInstance<IEnumerable<IService>>() == IEnumerable[Service1, Service2]
// Overriding in child container/profile or Autofac tenant
For<IService>().Use<Service3>();
GetInstance<IEnumerable<IService>>() == IEnumerable[Service1, Service2, Service3]
// Even if I use StructureMap's ClearAll
For<IService>().ClearAll().Use<Service3>();
GetInstance<IEnumerable<IService>>() == IEnumerable[Service1, Service2, Service3]
我的期望是,当涉及到多个实现(即集合)时,我应该能够使用某些东西来清除或替换父注册,以便我可以在父/全局和子/租户中保留特定服务的单独列表.
(我知道 StructureMap 不再维护,我愿意切换到另一个框架)。