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

Interface 依赖注入-松散耦合的代码-接口,interface,dependency-injection,Interface,Dependency Injection,我最近在设法控制DI。 如果到目前为止我对所有内容都理解正确,那么主要目的就是编写松散耦合的代码,以促进可重用性。 (另见) 到目前为止还不错,但有一件事我还不完全清楚,那就是接口应该放在哪里 一个例子讲述了一千多个单词: 图书馆A: public class A { public A(IInterfaceB b) {} } 图书馆B: public interface IInterfaceB {} public class B : IInterfaceB { pub

我最近在设法控制DI。 如果到目前为止我对所有内容都理解正确,那么主要目的就是编写松散耦合的代码,以促进可重用性。 (另见)

到目前为止还不错,但有一件事我还不完全清楚,那就是接口应该放在哪里

一个例子讲述了一千多个单词:

图书馆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??? 至少在我看来,这似乎不是松散耦合的

有人能解释一下我的想法哪里出了问题吗

  • 松散耦合的代码并不总是意味着松散耦合的模块(库)
  • 通过将接口和实现放在不同的模块中,可以实现模块(库)的松耦合。例如,类A在A.dll中,IInterfaceB在IInterfaceB.dll中(A.dll引用它),类B在B.dll中(它也引用IInterfaceB.dll)
  • 看起来像是
    class A->IInterfaceB 1)解释了我的想法哪里出了问题,但如果模块仍然紧密耦合,我仍然不明白可重用性的概念从何而来。我考虑过2)但是把每个接口放在自己的dll中感觉不太对。你不应该把每个接口放在单独的dll中。你应该从层次的角度来思考。每个层都应该有自己的SomeLayer.Contracts.dll(带有接口、异常和数据传输对象)和SomeLayer.Implementation.dll(带有具体的intarface实现)。你可以在这里深入了解它-这有点意义:-)我想我必须在我的头脑中对这个DI东西做出一个改变,因为我必须在我的GUI中引用每个项目(其中[This]()帮助很大)。@OleksandrKobylianskyi-那个PDF链接死了*(