У меня есть две сборки A и B.
A есть референт сразу к B, и это должно быть сохранено. Прямо сейчас я внес некоторые изменения в B, которые должны ссылаться на A. Так происходит циклическая ссылка.
Немного деталей:
A имеет несколько сеток свойств, которые необходимо разместить в диалоговом окне B. Поэтому, чтобы избежать этой проблемы с циклическими ссылками, я попытался определить интерфейсы к сеткам в третьей сборке, на которые ссылаются A и B, а сделать B относится только к интерфейсам.
Две проблемы, с которыми я столкнулся:
слишком много настраиваемых типов данных (чтобы быть конкретными свойствами) внутри сеток, которые определены внутри A, и я должен определить интерфейсы для каждого из них.
Я вижу, как это работает с параметром функции, например. вызвать целевую функцию через переданный интерфейс. Но как это будет соответствовать следующему коду - я не могу создать новый ICustomPropertyGridWrapper ...
object = new CustomPropertyGridWrapper (...)
m_property .SelectedObject = объект;
Для проблемы 1 на самом деле нет другого решения, кроме объединения двух проектов или генерации кода
Во втором случае вы можете сделать это, реализовав шаблон проектирования Factory.
Похоже, вы пытаетесь умереть через интерфейс. Не все должно быть доступно через интерфейс.
Простой ответ - либо объединить сборки, либо переместить общие элементы управления и типы данных в третью сборку. Вам нужно только связать вещи, если вы хотите согласованный договорный способ доступа или работы с вещами, и вы хотите скрыть фактическую реализацию.
Если теперь B зависит от битов A, возможно, вам следует реорганизовать эти биты в новую сборку C, на которую будут ссылаться как A, так и B.
Выполните рефакторинг кода или объедините сборки = не используйте циклические ссылки. Это признак очень плохого дизайна.