同じタイプ (Foo -> IFoo) の 2 つのコンポーネントを作成するように Castle Windsor を構成したいと思いますが、コンストラクターの入力は異なります。また、後で別のコンポーネントを作成するときに両方のコンポーネントを使用したいと思います (タイプ Bar - 以下のコードを参照)。
public interface IFoo { }
public class Foo : IFoo
{
private string _prop;
public Foo(string prop)
{
_prop = prop;
}
}
public class Bar
{
private IFoo _fooAbc;
private IFoo _foo123;
public Bar(IFoo fooAbc, IFoo foo123)
{
_foo123 = foo123;
_fooAbc = fooAbc;
}
}
コンポーネントインストーラーで、次のようなコンポーネントを登録しようとしました:
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Classes.FromThisAssembly()
.BasedOn<IFoo>().WithServiceBase()
.ConfigureFor<Foo>(c => c.DependsOn(Dependency.OnValue<string>("abc")).Named("fooAbc"))
.ConfigureFor<Foo>(c => c.DependsOn(Dependency.OnValue<string>("123")).Named("foo123")));
container.Register(Component.For<Bar>()); //?? specify which service to use
}
しかし、キャッスルは登録例外をスローします。では、Foo の 2 つのインスタンス (1 つは "abc"、もう 1 つは "123" 依存関係) を構成するにはどうすればよいでしょうか? また、後でBarを構築するときにそれらを正しく割り当てて、fooAbcが最初のコンストラクター入力として使用され、foo123が2番目として使用されるようにしたいと思います。私の最終目標は、バーをうまく解決することです。