Vs2008 циклические ссылки (C#)

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

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

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

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

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

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

Одно из решений, которое невозможно, - это создать третий проект и переместить туда MySite.Utils, потому что MySite.Utils фактически использует MyProject.Data (таким образом, он должен ссылаться на него, и будет создана другая циклическая ссылка)

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
1 292
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

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

Я считаю, что способ исправить это с помощью ТОЛЬКО - переместить все взаимосвязанные функции в одну сборку, чтобы не было циклических ссылок. Простите. :(

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

Какого черта? Почему голос против? Разве принятый ответ не совпадает с тем, что я сказал?

Vilx- 16.01.2009 23:02

Я бы изменил ваш ответ, указав "один".

MatthewMartin 15.11.2009 02:27

Лучшее исправление - это упростить вещи ... например, это служебный код данные служебный код или служебный код 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 По крайней мере, он может извлечь выгоду из ссылки ... ох!

matt_dev 16.01.2009 20:01

извините, это была моя вина. Я отредактировал свой пост, чтобы попытаться прояснить ситуацию

dan 16.01.2009 20:27

Избавьтесь от связывания с помощью внедрения зависимостей.

Программируйте в интерфейс.

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

Другие вопросы по теме