2013-02-07 85 views
0

我有相互雙向連接的類。 當Ninject創建類Parent時,它也會創建一個Child。問題是Child必須知道它的父母是誰。但我在IContext中找不到關於父對象的任何信息。獲取Ninject中的父對象

//The parent 
class Parent:IParent 
{ 
    public Parent(Child child) {...} 
} 

//The child needing to know who its parent is 
class Child:IChild 
{ 
    public Child(Parent parent) {...} 
} 

//The Ninject binding 
Bind<IChild>().To<Child>.WithConstructorArgument("parent", x=>GetParent(x)); 
Bind<IParent>().To<Parent>; 
Bind<IFactory>().ToFactory(); 

//Method to get the constructor parameter to Child containing the parent 
private IParent GetParent(IContext context) 
{ 
    // Should return the IParent that requested this IChild 
} 

當我打電話給IFactory.CreateParent()我想獲得一個雙向連接到一個孩子的父。

+0

請問你能詳細解釋一下你想完成什麼嗎?當你調用'Resolve '時,你不會將有關調用者的任何信息傳遞給內核。 –

+0

我看到我爲Bind寫了一個錯誤。它現在被糾正 – magol

+0

當我打電話給IFactory.CreateParent()我想要一個雙向連接到一個孩子的父。 – magol

回答

1

據我所知你不能。

你在這裏有一個circular reference,這是一件壞事。
你在ctors中說的是:我需要一個家長能夠創建一個孩子,並能夠創建我需要孩子的父母。其中之一需要首先創建,並且他們中的任何一個都不可以,因爲他們需要ctor中的其他人。

您需要使用Mediator模式才能擺脫它,或者作爲最後的手段使用Property Injection以使其正常工作。