Вы всегда можете создать реализацию как Singleton. Однако, говоря о репозитории, я не думаю, что в этом есть необходимость. Это не настоящая цель использования IoC. Использование IoC отделяет пользователя вашего кода от самой реализации. Это облегчает тестирование, так как вы можете менять местами и при необходимости. Кроме того, в моем случае я нахожу это очень полезным для других целей. Взять кеширование например. В своем локальном устройстве я использую Lucene.NET, чтобы обеспечить реализацию кеша дисковым кешем. Затем, когда я подталкиваю к своим платформам разработки и промежуточного уровня, я использую стандартную реализацию кэша .net. Затем, когда я запускаю производство, я могу использовать реализацию Velocity или MemCached. Мне не нужно делать ничего необычного, чтобы добраться из точки А в точку Б, поскольку я использую StructureMap (мой предпочтительный контейнер IoC).
Кажется, что Компонентный образ жизни - это скорее решение по проекту, чем решение IoC. Все три из упомянутых здесь методов управления жизненным циклом объекта могут быть выполнены без IoC ... но это может быть интересным побочным эффектом IoC (в некоторых случаях).