В каком слое должны находиться классы хранилища? Домен или инфраструктура?
Думаю, это зависит от того, как Вы собираетесь на них полагаться.
Вопрос - собираетесь ли Вы позволить себе использовать репозитории изнутри домена?
Если так - то Вы вынуждены их вставлять.
Я сам люблю ставить их вне домена. Итак - типичный жизненный цикл чего-то выглядит так =>
UI => Контроллер => получить совокупный корень из репо => логика вызова через совокупный корень => если создан новый совокупный корень, добавить его в репо.
Иногда контроллер вызывает службу приложения, которая помимо получения корневого каталога и вызова функции выполняет некоторые дополнительные действия. Но идея такая же - домен ничего не знает о настойчивости.
Хотя (на мой взгляд) нет ничего плохого в размещении репозиториев в домене (или, по крайней мере, в их абстракциях), это делает Ваш домен более осведомленным о постоянстве. Иногда это может решить проблемы, но в целом - это определенно усложнит Ваш домен.
Используйте то, что кажется Вам более естественным, и будьте готовы в любой момент изменить Свои пути.
Интерфейсы репозитория являются частью домена. Фактическая реализация интерфейсов должна быть частью инфраструктуры.