我的問題:在應用程序內部,所有接口都是在自己的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