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

私の知る限り、あなたはできません。

ここcircular referenceにあるのは、悪いことです。
ctorsであなたが言っていることは、子供を作成できるようにするには親が必要であり、子供が必要なその親を作成できるようにするには親が必要です。それらの1つを最初に作成する必要がありますが、ctorでもう1つを必要とするため、いずれも作成できません。

あなたMediatorはそれを取り除くために、またはそれを機能させるための最後の手段としてパターンを使用する必要がありProperty Injectionます。

于 2013-02-07T16:56:59.527 に答える