Круговые зависимости
У меня есть 2 проекта.
Проект № 2 имеет ссылку на проект № 1
Теперь мне нужно ссылаться на Project # 2 в Project # 1, но vs .net жалуется на круговую зависимость.
Есть ли выход из этого?
Ответы
Ответ 1
Абсолютно нет. Циклические зависимости являются показателем плохого дизайна. Я не хочу быть суровым. Есть некоторые способы из этого.
1) Вы можете реорганизовать общий код на другой проект, например Project # 0
2) Вы можете исправить свой дизайн, который, вероятно, подходит.
У дяди Боба есть хорошая статья о принципах упаковки, которая включает принцип ациклических зависимостей. http://www.objectmentor.com/resources/articles/granularity.pdf. Прочтите это, чтобы узнать, почему циклические зависимости - это плохо.
Ответ 2
Реорганизовать ваши проекты, чтобы вывести общие элементы в "Проект № 0", которые указаны как для Project # 1, так и для Project # 2.
Ответ 3
Объедините два в один или перепроектируйте.
Ответ 4
Это указывает на проблему в вашем дизайне. Если существует настоятельная потребность в том, чтобы два или более ваших типа были взаимно осведомлены, они должны существовать в одной и той же сборке.
Ответ 5
Нет. Стройте свои проекты должным образом. Попробуйте использовать какой-то порядок, основанный на абстракции - от низкого до высокого уровня.
Ответ 6
Круговая зависимость означает, что это уже не два независимых проекта (потому что там невозможно построить только один из них).
Вам нужно либо реорганизовать, чтобы у вас была только односторонняя зависимость, либо вы должны объединить их в один проект.
Ответ 7
Циркулярная ссылка может выполняться, как показано в предыдущем вопросе, но вы не должны этого делать для причины, о которых здесь уже говорили.
Ответ 8
I действительно не означает быть умным, но лучший дизайн программы - это ответ.
Ответ 9
Это, кажется, дефект дизайна, ничего другого. Ре-дизайн - это решение.
Ответ 10
Все скажут вам, что это плохой дизайн, не делайте этого и т.д. Однако иногда это легче сказать, чем сделать, и перемещение реализации в отдельный общий код нежелательно.
В таких случаях вместо непосредственного вызова другого пакета генерируйте событие из одного пакета и обрабатывайте его в другом. Таким образом, вам не нужно делать другой компонент зависимым в первом компоненте.
Другим способом, если вы все еще хотите сохранить реализацию в отдельных пакетах, является получение интерфейсов формы логических классов и их определение в отдельном пакете. Это работает, если у вас есть способ создать экземпляр реализации, например, с помощью внедрения зависимостей или других средств.
Ответ 11
Я не думаю, что это хорошее решение, но мы можем сделать это, выполнив следующие шаги.
- добавить ссылку
- просматривать и
- перейдите в папку Debug проекта dll,
- найдите .dll и Add.