Все интерфейсы определены в базовой сборке.Реализации могут быть реализованы в других сборках и будут связаны с контейнером IOC.
Интерфейсы определены на каждом уровне и реализованы на любом внешнем уровне.Таким образом, слой зависит от всех слоев внутри него.Количество слоев не является фиксированным, вы можете иметь слои, которые вы хотите.Если под сборкой вы имеете в виду файл jar, на каждом слое будет сборка.
Поскольку все интерфейсы определены в Ядре, а все сборки ссылаются на Ядро, это означает, что каждая сборка имеет доступ ккаждый интерфейс?
Я не очень хорошо понимаю ваш вопрос, но думаю, что вы имеете в виду: "Может ли слой получить доступ к любому интерфейсу внутреннего слоя?"Ответ "да".И не только внутреннего уровня, но и любого внутреннего уровня.
Т.е. теоретически вы можете импортировать службу UI в DAL, поскольку DAL имеет доступ к интерфейсу службы UI и разрешает его с помощьюконтейнер МОК
Да, вы можете это сделать.Вы не должны, хотя, но архитектура позволила бы сделать это.
Разве это не нарушает цель многоуровневого дизайна?В традиционной модели это было бы невозможно, поскольку сборка DAL не ссылается на сборку пользовательского интерфейса
Да, вы правы.Это происходит из-за того, что слои являются кругами, и потому что в каждом круге шаблон ничего не говорит о его разбиении.
Я что-то недопонимаю или это своего рода «злоупотребление» возможно в архитектуре Onion в противоположностьк нормальной N-уровневой архитектуре?
Вы правы.
В этом отличие гексагональной архитектуры: гексагональная является более явной и у вас есть разные адаптеры, а не слои.
Здесь у вас есть еще один вопрос и ответ об луке по сравнению с гексагональной:
Архитектура лука по сравнению с гексагональной