我有这种类的层次结构:
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导入错误的界面之前我无法使用它。
答案 0 :(得分:4)
你有一个循环依赖。那很糟。修复它或提供工厂来创建A。
答案 1 :(得分:0)
在Ninject中,您可以通过让您的班级实施IInitializable
来推迟一些工作。你可以在这里做类似的事情。在Initialize
中,您可以修复在基于构造函数的注入阶段期间无法实现的任何依赖项。
但是,你的问题不是很清楚。你陈述了一个问题,但不是具体的问题。是“为什么这不起作用?”,“这应该有用吗?”,“任何人都可以提出替代方案,策略吗?”等等?