C# 如何覆盖在Castle Windsor中注册的组件?

C# 如何覆盖在Castle Windsor中注册的组件?,c#,castle-windsor,ioc-container,C#,Castle Windsor,Ioc Container,我只是从Windsor开始,所以请温柔一点:)我有一个场景,我希望能够覆盖/替换放置在Windsor容器中的组件。继续读 在我的prod代码中,我希望能够注册实现基类的组件,并使用容器来解析实现者。到目前为止,使用 container.Register(Component.For<LoggerBase>().ImplementedBy<DebugLogger>()); container.Register(Component.For().ImplementedBy())

我只是从Windsor开始,所以请温柔一点:)我有一个场景,我希望能够覆盖/替换放置在Windsor容器中的组件。继续读

在我的prod代码中,我希望能够注册实现基类的组件,并使用容器来解析实现者。到目前为止,使用

container.Register(Component.For<LoggerBase>().ImplementedBy<DebugLogger>());
container.Register(Component.For().ImplementedBy());

container.Resolve();
在我的测试中,我想添加一个存根/模拟实现来覆盖“DebugLogger”实现,这样当我的prod代码调用
container.Resolve()时它获取被重写的实现


欢迎任何指点

您应该为不同的场景使用不同的容器实例,而不是追踪该路径。每个实例可以进行不同的配置。这就是DI容器的全部要点


但是,总的来说。

马克,谢谢你的建议,我没有考虑过这种方法。我想唯一的缺点是,如果容器中有大量注册,您希望覆盖单个组件。不过,这确实提供了一个很好的解决方案-再次感谢!如果需要多个几乎相同的容器,则可以创建派生容器,然后使用模板方法设计模式覆盖其不同的配置。版本3现在实现了
IsDefault
成员,允许您解决此问题。
container.Resolve<LoggerBase>();