依赖注入 - 松散耦合的代码 - 接口

时间:2013-12-19 08:26:05

标签: interface dependency-injection

我最近试图处理DI。 如果到目前为止我理解了所有内容,主要目的是编写松散耦合的代码,以便于重用。 (另见https://stackoverflow.com/a/9503612/579740

到目前为止一切顺利,但有一件事我还不完全清楚,就是在哪里放置接口。

一个例子讲述了超过一千个单词:

图书馆A:

public class A
{
    public A(IInterfaceB b)
    {}
}

图书馆B:

public interface IInterfaceB
{}

public class B : IInterfaceB
{
    public B (IInterfaceC c)
    {}
}

图书馆C:

public interface IInterfaceC
{}

public class C : IInterfaceC
{
    public C()
    {}
}

如果我将IInterfaceC放在C库中,我仍然可以参考图书馆B中的C库。 所以当我决定重用库B时,我仍然需要库C ??? 至少在我看来,它似乎没有松散耦合...

有人可以向我解释我的想法出错吗?

1 个答案:

答案 0 :(得分:1)

  1. 松耦合代码并不总是意味着松耦合模块(库)。
  2. 您可以通过将接口和实现放在不同的模块中来实现模块(库)的松散耦合。例如,A类在A.dll中,IInterfaceB在IInterfaceB.dll中(和A.dll引用它),B类在B.dll中(它也引用IInterfaceB.dll)
  3. 看起来如下 class A -> IInterfaceB <- class B 所以包含A类和B类的模块没有耦合。