接口dll中的类实现?

Inn*_*nno 0 c# architecture class-design interface

我的问题:在应用程序内部,所有接口都在自己的dll中声明(例如,项目"接口").

在项目界面内部,也有许多类实现.

现在我需要在另一个项目中使用这个已实现的类之一并获得环依赖项,因为该项目也是项目接口中的引用.

那么,绕过这种环依赖的最佳方法是什么?这可能是应用程序设计中的一个大错误吗?

示意图:

IBigInterface.cs(一个文件中的所有内容):

interface ISomeInterfaceA
{
    void SomeFunctionA(ClassB x);    // ClassB from newProject.cs
    void SomeFunctionB();
}

//
// etc.
//
class ClassA
{
    //
    // Code
    //
}
Run Code Online (Sandbox Code Playgroud)

newProject.cs(一个文件中的所有内容):

class ClassB
{
    //
    // used in interfaces.dll
    //
}

class ClassC
{
    void SomeFunction(ClassA a)    // ClassA from IBigInterface.cs
    {
        //
        // do something
        //
    }
}
Run Code Online (Sandbox Code Playgroud)

我想到的第一件事就是...... 喜欢:

IBigInterface.cs:

interface ISomeInterfaceA
{
    void SomeFunctionA(IInterfaceB x);    // use interface instead of a class
    void SomeFunctionB();
}

interface IInterfaceB
{
    //
    // declarations
    //
}

class ClassA
{
    //
    // implementation
    //
}
Run Code Online (Sandbox Code Playgroud)

newProject.cs:

class ClassB : IInterfaceB    // implementation of IInterfaceB
{
}

class ClassC
{
    void SomeFunction(ClassA a)
    {
        //
        // implementation
        //
    }
}
Run Code Online (Sandbox Code Playgroud)

因此项目newProject不再是项目接口中的引用(尽管这意味着整个应用程序中的更改).

PS:我继承了这个应用程序,所以在接口项目中实现类的想法不是我的想法:).一般来说,我会为每个类创建一个文件(所以不要指向这个:).

Jef*_*nal 6

首先,将具体类和它们实现的接口组合到一个程序集中没有任何问题(尽管调用项目"interfaces"会有点奇怪).

话虽如此,循环引用通常表示您已经过度模块化了代码:导致循环引用的部分属于一起,它们应该合并为一个程序集.

其他时候,循环引用只是一个类在错误层中的标志; 该类需要完全移动到另一个程序集中(通常是从较低级别的基础结构程序集进入较高级别的程序集).例如,ClassC可能真的属于引用 "接口"程序集的另一个项目.