Моя проблема: Внутри приложения все интерфейсы объявлены внутри собственной библиотеки 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 .: Я унаследовал это приложение, поэтому идея реализации классов в интерфейсном проекте не была моей идеей :).
В общем, я бы создал один файл для каждого класса (поэтому не указывайте на это:).