2014-01-08 27 views
1

这里非常简单的问题,但我很努力地找到它的任何信息。我有一个非常简单的父/子层次...自定义对象与Unity一起作用

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

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

...和我的容器注册的正是你所期望的:

this.Container.RegisterType<IParent, Parent>(); 
this.Container.RegisterType<IChild, Child>(); 

当容器创建一个父实例它会自动创建并注入一个新的儿童实例,但是如何将父引用注入该孩子?

基本上我试图找到Ninject的InScope方法的Unity等价物。

回答

1

构造函数注入会为你解决这个问题吗?

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

    public Parent(IChild child) 
    { 
     child.Parent = this; 
     this.Child = child; 
    } 
} 

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

构造函数中的IChild是由Unity没有[Dependency]装饰解决。

+0

它会在这种情况下,但我使用自定义范围的全部观点是,所以我不必将接口都传递给我的对象层次结构。在我提供的简单案例中,这不是什么大问题,当然,但我可以看到它在一个更大的应用程序中被吹掉。其他DI框架支持它,如果Unity本身没有某种机制,我会感到惊讶。 –

+0

@MarkFeldman你在寻找类似Unity PerResolveLifetimeManager的东西吗?它按照每个解决方案重新使用实例,如http://msdn.microsoft.com/en-us/library/ff660872(v=pandp.20).aspx上的msdn所述。我认为它看起来像'this.Container.RegisterType (新的PerResolveLifetimeManager());' – erli

+0

关闭足够erli,谢谢! –