2009-06-29 4 views
12

I有しコンストラクタのインターフェイスの配列をとるクラス:城ウィンザーは、インターフェイスタイプのアレイを注入することができない

container.Register(AllTypes.Pick().FromAssemblyNamed("...") 
        .WithService.FirstInterface()); 
container.AddComponent("foo", typeof(IFoo<,>), typeof(Foo<,>)); 

Iを次のよう

public class Foo<T1, T2> : IFoo<T1, T2> 
{ 
    public Foo(IBar[] bars) 
    { 
     ... 
    } 
} 

マイ容器登録が見えますServiceLocator.Current.GetAllInstances<IBar>()がうまく動作するので、IBarのいくつかの実装があり、コンテナはそれらを確実に見つけることができます。

しかし、私がIFooのインスタンスを取得しようとすると、それは "deoendency ..."を満たすことができないという例外をスローします。

コンストラクタを変更してIBarの単一インスタンスを取得すると、正常に動作します。

アイデア?

答えて

23

ArrayResolverを追加します。

container.Kernel.Resolver.AddSubResolver(new ArrayResolver(container.Kernel)); 
+1

はウィンザーのよくある質問も参照してください:http://using.castleproject.org/display/IoC/FAQ –

+0

が、これは代わりに、設定ファイルを介して行うことができますか? –

+0

@Ben:現時点ではありませんが、あなたはuservoiceで提案することができます:http://castle.uservoice.com: "xml configを介してサブリゾルバーを追加" –

関連する問題