在Ninject中获取父对象

时间:2013-02-07 16:37:08

标签: c# ninject

我有彼此双向连接的类。 当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()时,我希望得到一个与孩子有双向连接的家长。

1 个答案:

答案 0 :(得分:1)

据我所知你不能。

这里有一个circular reference,这是一件坏事 您在ctors中所说的是:我需要父母能够创建一个孩子,并且能够创建我需要孩子的父母。其中一个需要先创建,但没有一个可以因为他们需要另一个在ctor中。

您需要使用Mediator模式来摆脱它,或者作为最后的手段使用Property Injection来实现它。