我的问题:在应用程序内部,所有接口都是在自己的dll(例如项目“接口”)中声明的。接口DLL中的类实现?
项目接口内部也有很多类实现。
现在我需要在另一个项目中实现这些类中的一个,并获得环形依赖项,因为此项目也是项目接口中的参考。
那么,解决这个环依赖的最好方法是什么?有可能这是应用程序设计中的一个重大错误吗?
示意图:
IBigInterface.cs(一切都在一个文件中):
interface ISomeInterfaceA
{
void SomeFunctionA(ClassB x); // ClassB from newProject.cs
void SomeFunctionB();
}
//
// etc.
//
class ClassA
{
//
// Code
//
}
(在一个文件中的所有内容)
newProject.cs:
class ClassB
{
//
// used in interfaces.dll
//
}
class ClassC
{
void SomeFunction(ClassA a) // ClassA from IBigInterface.cs
{
//
// do something
//
}
}
即进入第一件事我的想法是。像:
IBigInterface.cs:
interface ISomeInterfaceA
{
void SomeFunctionA(IInterfaceB x); // use interface instead of a class
void SomeFunctionB();
}
interface IInterfaceB
{
//
// declarations
//
}
class ClassA
{
//
// implementation
//
}
newProject.cs:
class ClassB : IInterfaceB // implementation of IInterfaceB
{
}
class ClassC
{
void SomeFunction(ClassA a)
{
//
// implementation
//
}
}
使项目newProject不会在项目界面参考了(尽管这意味着在整个变化应用)。
P.S .:我继承了这个应用程序,所以在接口项目中实现类的想法不是我的想法:)。 一般来说,我会为每个类创建一个文件(所以不要指向这:)。
“引起循环引用的部分属于一起” - 我同意你的一般意见,但也可能是因为属于顶层的组件被置于底层。我有不幸接管这样的代码:(花了我几天的时间来修复,并将组件移动到正确的层次上。 – Pete 2009-12-03 14:25:42
@Pete - true!更新我的答案。 – 2009-12-03 14:57:02