Я не думаю, что с этими двумя ссылками что-то не так.
Но я бы подумал, что такое «Ядро». Это логика вашего домена? Если так, я не уверен, что у меня была бы ситуация, когда ваша сборка доступа к данным знает о логике вашего домена, а ваш уровень GUI знает об обоих.
Если «Ядро» является доменной логикой, вы можете поместить в нее классы (например, Шаблон IRepository ), которые знают о сборке «Данные». Ваша веб-сборка будет знать о «ядре», но не о «данных».
Чтобы упростить эту договоренность, вы можете создать четвертую сборку под названием «DataTransfer» и определить некоторые объекты (или, еще лучше, интерфейсы), о которых «Core», «Data» и «Web» знают и используют для связи с друг друга. На самом деле, если вы действительно хотите отсоединиться, структурирование вещей с помощью сборки «Типы», содержащей интерфейсы, может на самом деле сделать так, чтобы ни одна из трех ваших исходных сборок не знала друг о друге.
Но тогда, если «Ядро» - это на самом деле библиотека, а не логика вашего домена, возможно, имеет смысл перейти к вашей текущей структуре и, возможно, позже пересмотреть ее, если вы добавите достаточно функциональности, чтобы начать использовать больше сборок / слоев.
Изменить: Чтобы помочь визуализировать, что я имею в виду, я говорю о многоуровневой ситуации:
Web
|
v
Core
|
v
DataAccess
вместо:
Web
| \
v \
Core |
^ |
| v
DataAccess
У вас есть три ссылки, когда вы можете заставить их работать с двумя. Излишнее / ненужное сцепление рано приводит к головным болям позже.