我想将 Castle Windsor 配置为创建两个相同类型的组件(Foo -> IFoo),但具有不同的构造函数输入。稍后我还想在创建另一个组件时使用这两个组件(类型 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 的两个实例,一个具有“abc”,另一个具有“123”依赖项?此外,我稍后想在构造 Bar 时正确分配它们,以便将 fooAbc 用作第一个构造函数输入,将 foo123 用作第二个。我的最终目标是成功解决 Bar.