在Castle Windsor中为运行时的服务注册其他组件实现

时间:2012-06-01 11:26:24

标签: castle-windsor ioc-container

使用Castle Windsor我可以注册一个类型的多个实现,例如

container.Register(Component.For<IMyInterceptor>()
    .ImplementedBy<MyInterceptor>();

container.Register(Component.For<IMyInterceptor>()
    .ImplementedBy<MyInterceptor2>();

这一切都按照您的预期工作,我可以使用ResolveAll()

解决多个实现

如果我尝试在运行时注册另一个实现的实例 - 例如

var interceptor = new MyInterceptor3();
Container.Register(
    Component.For<IMyInterceptor>()
        .Instance(interceptor));

我得到一个例外:

已经为给定密钥MyInterceptor3

注册了一个组件

这是预期的行为吗?我想要实现的是使用例如Container.ResolveAll()获取IMyInterceptor的默认实现列表以及可选的其他实现(即,在启用调试模式时,基于请求的请求)。

1 个答案:

答案 0 :(得分:1)

这会让你感到厌烦。

var interceptor = new MyInterceptor3();
Container.Register(
    Component.For<IMyInterceptor>()
        .Instance(interceptor).Named("something unique));

名称必须是唯一的。