Подтвердить что ты не робот

Круговые зависимости

У меня есть 2 проекта.

Проект № 2 имеет ссылку на проект № 1

Теперь мне нужно ссылаться на Project # 2 в Project # 1, но vs .net жалуется на круговую зависимость.

Есть ли выход из этого?

4b9b3361

Ответ 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.