Проблема циклической зависимости в С# при попытке добавить ссылки

У меня есть две библиотеки классов (скажем, LibA и LibB). LibA использует некоторые функции LibB, поэтому я добавляю ссылку на LibB в LibA.

Теперь LibB также должен использовать некоторый код LibA. Я не могу добавить ссылку LibA на LibB сейчас из-за циклической зависимости. Что я могу сделать теперь, когда мой LibB может получить доступ к коду LibA?


person user2968369    schedule 08.11.2013    source источник
comment
Поместите код в отдельную библиотеку, чтобы оба проекта могли получить к нему доступ, не завися друг от друга.   -  person Ric    schedule 08.11.2013
comment
ну любое другое решение, кроме этого неэффективного способа вставки копирования и избыточности кода   -  person user2968369    schedule 08.11.2013
comment
Речь идет не о копировании, а о перемещении кода в отдельную сборку, доступную для всех проектов.   -  person CodeCaster    schedule 08.11.2013
comment
Таким образом, уменьшение зависимости и размещение кода в другой библиотеке неэффективно и избыточно??   -  person Ric    schedule 08.11.2013
comment
@ user2968369 Вам не нужно копировать и вставлять код. Вам нужно переместить его в другую сборку.   -  person Alberto    schedule 08.11.2013
comment
Меня всегда удивляет, что, когда публикуется правильное решение, исходный постер отвергает его. Зачем вообще задавать вопрос?   -  person spender    schedule 08.11.2013
comment
Возможно, вам стоит прочитать о принципах SOLID, они помогли мне при планировании проектов: blog.gauffin.org/2012/05/   -  person GrandMasterFlush    schedule 08.11.2013
comment
Хорошо, ребята, я понял. вы правы в этом :). Спасибо. еще один спин-офф этого q. Если у меня есть проект «приложения оконных форм», и у него есть ссылка на библиотеку классов, скажем, LibA. Теперь LibA хочет получить доступ к некоторым данным этого проекта «приложения оконных форм», как это сделать сейчас? или тот же вышеупомянутый подход будет применяться здесь   -  person user2968369    schedule 08.11.2013
comment
Просто для полноты вы также можете объединить LibA и LibB в одну библиотеку. Похоже, они в любом случае тесно связаны, так что, может быть, они принадлежат друг другу? Если они небольшие, их слияние также может привести к повышению производительности. Избегайте создания слишком большого количества небольших сборок.   -  person Kris Vandermotten    schedule 08.11.2013


Ответы (1)


Код следует поместить в новую библиотеку, чтобы оба проекта могли повторно использовать код. Кроме того, если к решению добавляется новый проект, он также может использовать общий код. В любом случае это не является неэффективным или избыточным и свидетельствует о хорошем дизайне и удобстве использования.

person Ric    schedule 08.11.2013
comment
хорошо, вы правы в этом :). Спасибо я поняла. еще один спин-офф этого q. Если у меня есть проект «приложения оконных форм», и у него есть ссылка на библиотеку классов, скажем, LibA. Теперь LibA хочет получить доступ к некоторым данным этого проекта «приложения оконных форм», как это сделать сейчас? или тот же вышеупомянутый подход будет применяться здесь - person user2968369; 08.11.2013
comment
В проекте пользовательского интерфейса передайте данные в LibA, такие как текст из текстового поля и т. д. Таким образом, LibA не зависит от каких-либо компонентов WinForm и может быть эффективно повторно использована в другой момент времени. - person Ric; 08.11.2013