gpt4 book ai didi

Ninject - 如何从注入(inject)的子对象引用父对象

转载 作者:行者123 更新时间:2023-12-04 04:09:30 25 4
gpt4 key购买 nike

我正在尝试使用 Ninject 来组成一个对象图,其中父对象包含一个子对象,并且子对象还维护对其父对象的引用。

如果没有依赖注入(inject),它看起来像这样:

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 绑定(bind)以支持这种关系,这样 IParent 的多个实例可以在 transient 范围内实例化,每个实例都自动填充一个 IChild 包含对它的循环引用的实例。

我已阅读建议 Ninject 可以支持循环关系的评论,但我无法得出有效的配置。

有什么建议吗?

谢谢,

蒂姆。

最佳答案

如果其他人遇到此问题,这是我使用的解决方案(尽管我承认可能存在更好的解决方案):

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 接口(interface),这使得它在合成完成后接收回调。在此回调处理程序中,父实例只是为子对象分配一个对 this 的引用。

关于Ninject - 如何从注入(inject)的子对象引用父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13561609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com