我有彼此双向连接的类。
当Ninject创建类Parent
时,它还会创建Child
。问题是Child
必须知道其父母是谁。但我在IContext
中找不到有关父对象的任何信息。
//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 :(得分:1)
据我所知你不能。
这里有一个circular reference
,这是一件坏事
您在ctors中所说的是:我需要父母能够创建一个孩子,并且能够创建我需要孩子的父母。其中一个需要先创建,但没有一个可以因为他们需要另一个在ctor中。
您需要使用Mediator
模式来摆脱它,或者作为最后的手段使用Property Injection
来实现它。