В большинстве случаев, когда мне нужно, чтобы две вещи ссылались друг на друга, я создал интерфейс для удаления циклической ссылки. Например:
до
public class Foo
{
Bar myBar;
}
public class Bar
{
Foo myFoo;
}
График зависимостей:
Foo Bar
^ ^
| |
Bar Foo
Foo зависит от Bar, но Bar также зависит от Foo. Если они находятся в отдельных сборках, у вас будут проблемы со сборкой, особенно если вы делаете чистую перестройку.
ПОСЛЕ
public interface IBar
{
}
public class Foo
{
IBar myBar;
}
public class Bar : IBar
{
Foo myFoo;
}
График зависимостей:
Foo, IBar IBar
^ ^
| |
Bar Foo
Foo и Bar зависят от IBar. Круговой зависимости нет, и если IBar размещен в его собственной сборке, Foo и Bar, находящиеся в отдельных сборках, больше не будут проблемой.