(特定の問題を強調するシナリオはやや簡略化されています)。Castle Windsorはゼロ個以上の実装を解決します
私は、サービス・インターフェースの配列である単一のパラメータを持つコンストラクタを持つコンポーネントを、解決するために城ウィンザーを使用しようとしている:
ウィンザーコンテナはArrayResolverを使用するように設定されてpublic class TestClass<T>
{
public TestClass(IService<T>[] services)
{
...
}
}
:
container.Kernel.Resolver.AddSubResolver(new ArrayResolver(container.Kernel));
このすべてが正常に動作し、1つ以上のサービスがしかし、いくつかのTのために、何のimplemeがないT.
の様々なインスタンスのために注入されます。 IService<T>
の番号。目標は、長さゼロの配列でコンストラクタを呼び出すことです。
特定のTのIServiceの具体的な実装がない場合、実装しないでIServiceの定義をどのように登録すればよいのですか?そのため、コンテナはその型を認識していますか?
私が使用して、現在のよ:これは具体的なクラスから駆動されるため
container.Register(
Classes.FromAssembly(Assembly.GetExecutingAssembly())
.BasedOn<IService<>>()
.WithService.FirstInterface());
をしかし、それは明らかに任意の「未使用」IServiceを登録していません。
フォールバックは、「本当の」実装を持たないTに対してIServiceのスタブ実装を提供することですが、そのようなスタブを多数使用してコードを汚染したくない場合があります。 (オープンジェネリックを通じていくつかのリフレクションを提供することもできます...)。同僚によってそれに向けられてきた自分の質問に、答える