我想將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問題。
它怎麼知道如何解決這兩者之間的問題?我不明白你問的是什麼可能。你解決IFoo或Foo和酒吧? –
通過註冊名稱也許?最後,我想要解決Bar和所需的IFoo實例。我對我的模糊性表示歉意,但我對城堡和IoC容器的使用情況都很陌生。 – Rok