Технически вы можете создавать перекрестные ссылки в любом направлении в .NET (для DAL нет технических ограничений для ссылки на компонент пользовательского интерфейса, даже если это не очень хорошая идея). Я не вижу проблем со ссылками на модули в одном слое.
Но нам нужно немного взглянуть на слово «слой», поскольку слои бывают разных форм и размеров. Часто, когда мы используем слово «слой», мы думаем, что уровень доступа к данным или уровень представления данных, и мы обычно позволяем слоям смотреть вниз, но не вверх.
Внутри каждого слоя различные модули также могут логически выстраиваться в слои. То же правило применяется здесь; модуль может смотреть вниз, но не вверх. Имея это в виду, вполне безопасно ссылаться на модули внутри одного (внешнего) слоя.
Только не делайте, чтобы два модуля ссылались друг на друга, прямо или косвенно. Если вы обнаружите, что A и B оба нуждаются в функциональности друг от друга (что указывает на то, что A и B находятся на одном уровне), вам, вероятно, потребуется реорганизовать код, возможно, введя новый модуль C, логически расположенный под A и B, который из них можно использовать.
Также имейте в виду, чтобы модули были максимально отсоединены; чем меньше они знают друг о друге, тем лучше.