3

Ninjectを使用して、親オブジェクトに子オブジェクトが含まれ、子オブジェクトもその親への参照を保持するオブジェクトグラフを作成しようとしています。

依存性注入がないと、次のようになります。

public interface IParent { }
public interface IChild { }

public class Parent : IParent
{
    public Parent()
    {
        Child = new Child(this);
    }

    public IChild Child { get; private set; }       
}

public class Child : IChild
{
    public Child(IParent parent)
    {
        Parent = parent;
    }

    public IParent Parent { get; private set; }
}

この関係をサポートするようにNinjectバインディングを構成できるようにしたいと思います。これにより、の複数のインスタンスが一時スコープでインスタンス化され、各インスタンスに循環参照を保持するIParentインスタンスが自動的に入力されます。IChild

Ninjectが循環関係をサポートできることを示唆するコメントを読みましたが、動作する構成に到達できませんでした。

何か提案はありますか?

ありがとう、

ティム。

4

1 に答える 1

3

他の誰かがこの問題に遭遇した場合に備えて、私が使用した解決策は次のとおりです(ただし、より良い解決策が存在する可能性があることは承知しています)。

public interface IParent { }

public interface IChild
{
    IParent Parent { get; set; }
}

public class Parent : IParent, IInitializable
{
    public Parent(IChild child)
    {
        Child = child;
    }

    public IChild Child { get; private set; }

    public void Initialize()
    {
        Child.Parent = this;
    }
}

public class Child : IChild
{
    public IParent Parent { get; set; }
}

重要なのは、親クラスにNinjectのIInitializableインターフェースを実装することです。これにより、構成が完了した後にコールバックを受信します。このコールバックハンドラーでは、親インスタンスは子オブジェクトにへの参照を割り当てるだけthisです。

于 2012-11-27T13:35:49.763 に答える