Unity构造函数参数,带有扭曲

时间:2011-08-09 09:41:06

标签: c# .net unity-container

我有这种类的层次结构:

public interface IA{}

public interface IB{void Foo();}

public class A:IA
{
 [Dependency]
 IB myb{get;set;}

 void myfunc(){ myb.Foo()}
}

public class B:IB
{
 public B(IA ia){}
}

我想用Unity制作A类的实例。 但是当我想要做到这一点时,我想写下这样的东西:

public Testclass
{   
 void TestMethod()
 {
  IUnityContainer container = new UnityContainer();
  A currentA;
  container.RegisterType<IB,B>(new InjectionConstructor(currentA);
  currentA = container.Resolve<A>(); 
 }
}

这在container.RegisterType行失败,说“参数类型推断不适用于空值。”

如何使这项工作?

编辑:啊,我多么讨厌这个...我们的建筑师制作了两个同名的界面,这就是为什么我浪费了2个小时的生命。 Daniel Hilgarth给了我一个好主意,但在我意识到resharper导入错误的界面之前我无法使用它。

2 个答案:

答案 0 :(得分:4)

你有一个循环依赖。那很糟。修复它或提供工厂来创建A。

答案 1 :(得分:0)

在Ninject中,您可以通过让您的班级实施IInitializable来推迟一些工作。你可以在这里做类似的事情。在Initialize中,您可以修复在基于构造函数的注入阶段期间无法实现的任何依赖项。

但是,你的问题不是很清楚。你陈述了一个问题,但不是具体的问题。是“为什么这不起作用?”,“这应该有用吗?”,“任何人都可以提出替代方案,策略吗?”等等?