我正在尝试使用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可以支持循环关系,但我无法达到工作配置。
有什么建议吗?
谢谢,
添
答案 0 :(得分: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
的引用。