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 に答える