Вот настройки, которые у меня есть в решении vs2008:
Уровень данных в проекте MyProject.Data
Веб-приложение в проекте MyProject.Web
MyProject.Web имеет ссылку на MyProject.Data
В MyProject.Web у меня есть класс, который я использую, под названием «MySite.Utils».
Я хочу иметь возможность использовать MySite.Utils в MyProject.Data, но не могу, потому что это вызовет циклическую ссылку.
Одно из решений, которое невозможно, - это создать третий проект и переместить туда MySite.Utils, потому что MySite.Utils фактически использует MyProject.Data (таким образом, он должен ссылаться на него, и будет создана другая циклическая ссылка)
Какой лучший / самый простой способ исправить это?





Вам нужно переместить MySite.Utils в MyProject.Data по его звуку
Я считаю, что способ исправить это с помощью ТОЛЬКО - переместить все взаимосвязанные функции в одну сборку, чтобы не было циклических ссылок. Простите. :(
Может быть, подумайте об изменении архитектуры как-нибудь, чтобы этого не требовалось?
Я бы изменил ваш ответ, указав "один".
Лучшее исправление - это упростить вещи ... например, это служебный код данные служебный код или служебный код ui. Возможно разделить его на 2 dll; это могло бы упростить задачу.
После этого интерфейсы являются разумным вариантом, но вам может потребоваться некоторая структура IoC для обеспечения реализаций. IoC - это наиболее распространенный способ решения этой проблемы. Например, вы объявляете свой ICustomerRepository в эталонной сборке; все ссылается на это. Ваш DAL орудия интерфейс, но проекту utils больше не нужно ссылаться на DAL - только на сборку интерфейса. Теперь ваш DAL может ссылаться на утилиты - или он может просто знать о другом интерфейсе IDataUtils (лучше, конечно, разделить его более осмысленно). Клей здесь - контейнер IoC, такой как Castle Windsor.
Наконец, и не делай этого, но даже если IDE не позволяет, в .NET можно создавать циклические ссылки (с помощью инструментов командной строки); это законно, но очень быстро становится беспорядочно, и сломанную сборку трудно исправить. Не ходи туда !!
Похоже, вы могли бы извлечь выгоду (и получить удовольствие!) От чтения этого ...
http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756
Ого ... это был большой мозговой пердун ... извините :-P По крайней мере, он может извлечь выгоду из ссылки ... ох!
извините, это была моя вина. Я отредактировал свой пост, чтобы попытаться прояснить ситуацию
Избавьтесь от связывания с помощью внедрения зависимостей.
Программируйте в интерфейс.
MySite.Utils не должен ссылаться на какой-либо другой проект в вашем решении. Любые классы, которые ссылаются на другое решение в Utils, следует переместить в то решение, на которое оно ссылается.
Какого черта? Почему голос против? Разве принятый ответ не совпадает с тем, что я сказал?