Вам нужно отделить WindowManager
от Bar
.
Если Bar
требуется доступ к функциональности оконного менеджера. Используйте событие / делегат и позвольте оконному менеджеру подписаться, чтобы он мог выполнять все, что ему нужно, на Bar
. или создайте общий интерфейс между ними, чтобы вы могли передать этот контракт в bar.
В любом случае, вам придется реорганизовать это таким образом, чтобы логически зависимые проекты заботились только об ответственности, которая имеет смысл для них на этом уровне.
Подумайте об этом, строитель нанимает каменщик. Каменщик не знает и не должен иметь никаких знаний о бухгалтерском программном обеспечении, которое использует строитель, он просто возвращает счет-фактуру, когда работа выполнена (событие), он не вызывает счет-фактуру или не оплачивает подрядчику счета програмное обеспечение. Леди счетоводов делает то, что ей нужно, и дает зарплату каменщику (или тому, что когда-либо).
Короче говоря, у каменщика есть событие, или у них общий заранее определенный общий контракт (интерфейс), то есть, если бар имеет интерфейс IWindowManager
, он может вызывать GetWorkspaces () ,
В любом случае, только у вас есть возможность логически разделить это без циклических ссылок, и что имеет для вас смысл