Я думаю, что путь к этому может заключаться в том, что если вы хотите иметь возможность модульного тестирования своего кода, вам необходимо абстрагировать все зависимости от того, что вы тестируете. Вы можете сделать это с помощью модели провайдера, но это означает, что через провайдеров нужно гораздо больше, чем вы, вероятно, хотите иметь дело.
Допустим, у вас есть приложение, которое вызывает некоторые внешние сторонние сервисы, но также имеет локальную базу данных. Ваши контроллеры иногда вызывают «провайдера» (для внешних служб), но иногда вызывают «репозиторий» для локальной базы данных. Итак, как вы собираетесь провести модульное тестирование методов, которые вызывают хранилище? Я предполагаю, что вам нужно абстрагировать всю вашу локальную базу данных через провайдеров. В этом случае вы либо получите одну или две огромные реализации провайдера (плохой дизайн, чтобы иметь слишком много методов на класс), либо вы получите множество мелких провайдеров (кошмар конфигурации).
С контейнером IOC вы можете выполнить большую часть соединений в самом коде. Использование насмешливого фреймворка облегчает юнит-тестирование. Поэтому, если вы действительно хотите, вы можете использовать провайдеров для «внешних вызовов» и IOC для «внутренних вызовов».
Я просто размышляю над этим, потому что у нас много унаследованного кода в провайдерах, и я думаю отойти от них и просто использовать прямой IOC. Я полагаю, что контейнеры IOC, такие как AutoFac, могут повторять это требование возможности «подключить» другую реализацию через конфигурацию, так что вы ничего не потеряете.
Узнайте больше на моем блоге - надеюсь, блог тоже получит хорошие комментарии: http://healthedev.blogspot.com/2011/12/making-custom-built-applications.html