【发布时间】:2014-02-06 19:32:08
【问题描述】:
我有 3 个班级:A 级、B 级和 C 级。
Class A
{
public void doSomething()
{
var b = new B();
b.doSomething();
}
}
Class B
{
public void doSomething()
{
var c = new C();
c.doSomething();
}
}
Class C
{
public void doSomething()
{
//do something
}
}
我必须使上述代码可测试。所以我打算使用依赖注入。重构后我的代码是这样的
public interface InterfaceB
{
void doSomething();
}
public class A
{
private InterfaceB _b;
public A(InterfaceB b)
{
_b = b;
}
public void doSomething()
{
_b.doSomething();
}
}
public interface InterfaceC
{
void doSomething();
}
public class B : InterfaceB
{
private InterfaceC _c;
public B(InterfaceC c)
{
_c = c;
}
public void doSomething()
{
_c.doSomething();
}
}
public class C : InterfaceC
{
public void doSomething()
{
// do something
}
}
Main()
{
var a = new A(new ClassB());
}
我很清楚第一级依赖注入。我如何进行第二级依赖注入,而我的 ClassB 又依赖于 ClassC。
感谢您的帮助。
问候, 苏约格
【问题讨论】:
-
究竟什么不清楚?
-
我很确定你已经设置了所有的依赖注入。
B被注入到A中,C被注入到B中。只需像这样创建一个实例:var a = new A(new ClassB(new ClassC)); -
A 会采用 B 和 C 接口吗?我读到的是 A 不应该知道 C,因为它只依赖于 B。
-
在 Joroen 的例子中,A 不知道 C——类 creating A (Main()) 知道 C。
标签: c# unit-testing dependency-injection