vs2008 циклические ссылки (c #) - PullRequest
2 голосов
/ 16 января 2009

Вот настройка, которую я имею в решении vs2008:

Уровень данных в проекте с именем MyProject.Data

Веб-приложение в проекте с именем MyProject.Web

MyProject.Web имеет ссылку на MyProject.Data

В MyProject.Web у меня есть класс, который я использую под названием «MySite.Utils»

Я хочу использовать MySite.Utils в MyProject.Data, но не могу, потому что это приведет к циклической ссылке.

Одним из решений, которое НЕ ВОЗМОЖНО, является создание третьего проекта и перемещение туда «MySite.Utils», поскольку MySite.Utils фактически использует MyProject.Data (таким образом, ему необходимо ссылаться на него, и будет создана другая циклическая ссылка)

Какой самый лучший / самый простой способ исправить это?

Ответы [ 6 ]

11 голосов
/ 16 января 2009

Вам нужно переместить MySite.Utils в MyProject.Data по его звуку

4 голосов
/ 16 января 2009

Лучшее решение - упростить вещи ... например, это код утилиты data код утилиты или ui код утилиты. Возможно, разделить его на 2 dll; это может упростить ситуацию.

После этого приемлемым вариантом являются интерфейсы, но вам может потребоваться некоторая среда IoC для обеспечения реализаций. IoC является наиболее распространенным способом решения этой проблемы. Например, вы объявляете ваш ICustomerRepository в справочной сборке; все ссылается на это. Ваш DAL реализует интерфейс, но проекту utils больше не нужно ссылаться на DAL - только сборка интерфейса. Ваш DAL теперь может ссылаться на утилиты - или он может просто знать о другом интерфейсе IDataUtils (лучше, конечно, разбить его более осмысленно). Клей здесь - это контейнер IoC, такой как Castle Windsor.

Наконец, и этого не делают , но даже несмотря на то, что IDE не позволяет, в .NET можно создавать циклические ссылки (с помощью инструментов командной строки); это законно, но очень быстро становится очень грязно, и трудно восстановить сломанную сборку. Не ходи туда !!

2 голосов
/ 16 января 2009

MySite.Utils не должен ссылаться ни на какой другой проект в вашем решении. Любые классы, которые ссылаются на другое решение в Utils, должны быть перемещены в это решение, на которое оно ссылается.

2 голосов
/ 16 января 2009

Поражение сцепления с инжекцией зависимости.

Программа для интерфейса.

0 голосов
/ 16 января 2009

Похоже, вы могли бы извлечь выгоду (и наслаждаться!), Прочитав это ...

http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756

0 голосов
/ 16 января 2009

Я полагаю, что ONLY способ исправить это - переместить все взаимосвязанные функции в одну сборку, чтобы не было циклических ссылок. Сожалею. (

Может, подумаете об изменении архитектуры как-то, что это не требуется?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...