2

使用 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 的默认实现列表以及可选的附加实现(即,在启用调试模式时,基于请求的请求)。

4

1 回答 1

1

这会帮你解决的。

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

名称必须是唯一的。

于 2012-06-05T14:15:06.353 回答