Думаю тут играет роль принцип одной обязанности. Ну и плюс паттерн фабрика.
Класс репозитория должен отвечать за одну задачу, полагаю это действия над репозиторием. Если ему нужно получить некий объект, он не задумываясь берет нужную фабрику и получает объект и дальше работает с объектом. Классу репозитория не нужно знать как создается объект и что для этого нужно. Он должен знать лишь что от такой-то фабрики можно получить класс объектов, реализующих интерфейс или наследующих некий класс. А вот уже фабрика должна располагать алгоритмом создания того или иного объекта.
Такой подход уменьшает связность и увеличивает гибкость. Если нужно поменять код создания объектов, то правится и тестируется только класс фабрики. Все клиенты этой фабрики должны лишь знать, что гарантированно получат объект с определенным интерфейсом.