0

我有彼此双向连接的课程。当 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()我想得到一个与孩子有双向连接的父母。

4

1 回答 1

1

据我所知,你不能。

您在这里拥有的是 a circular reference,这是一件坏事。
你在 ctors 中说的是:我需要一个父母才能创造一个孩子,并且能够创造那个父母,我需要这个孩子。其中一个需要先创建,而没有一个可以,因为它们需要在 ctor 中创建另一个。

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

于 2013-02-07T16:56:59.527 回答