我们说我有以下课程:
class A
{
// reference to B
private B _b;
// constructor for A
public A(B b)
{
_b = b;
}
}
class B
{
private A _a;
// constructor for B
public B()
{
// initialize A and give it a reference on self
a = new A(this);
}
}
如何使用依赖注入替换A的手动初始化,考虑A实现相应的接口IA,并且我的ninject配置中有相应的绑定:
.Bind<IA>().To<A>().InTransientScope();
欢迎任何解决方法:) 附:这是一个WPF应用程序。
答案 0 :(得分:2)
您需要将代码重构为
class A {
private B _b;
public A(B b) {
_b = b;
}
}
class B {
private A _a;
public B(A a) {
_a = a;
}
}
但是,这会创建一个循环引用,您的容器可能会抛出异常。
要解决此问题,您需要将代码重构为
class A {
private C _c;
public A(C c) {
_c = c;
}
}
class B {
private A _a;
private C _c;
public B(A a, C c) {
_a = a;
_c = c;
}
}
class C {
public C() {
}
}
请参阅Circular Dependency in constructors and Dependency Injection,了解如何将类重构为C