В зависимости от сложности вашего сценария, вы можете захотеть создать разделительный слой для приложения-службы WCF, и именно здесь использование Inversion of Control может иметь смысл.
Клиент, очевидно, не должен знать, а тем более сообщать службе, какого поставщика данных использовать. Решать это должна ваша служба WCF. Вы можете использовать либо локатор службы внутри конструктора класса WCF, либо внедрить необходимую службу, используя IInstanceProvider или ServiceHostFactory .
Оттуда вам решать, какие сервисы использует ваше приложение WCF.
Одним из распространенных решений является абстрагирование устойчивости данных с использованием шаблона Repository , что имеет смысл, особенно если ваша служба WCF содержит какую-либо существенную бизнес-логику. В этом типе сценария вы создадите классы репозитория, которые выполняют всю специфичную для поставщика данных логику. Затем эти классы могут быть издеваны или заглушены, чтобы включить модульное тестирование сервисов.
В других случаях, особенно когда ваши службы WCF предоставляют операции CRUD практически без бизнес-логики, я считаю, что создание дополнительного уровня между конечными точками службы и базой данных не имеет смысла. В конечном счете, в какой-то момент часть части вашей программы должна знать о базе данных. Использование DI / SL / IoC не должно быть самоцелью.