Желательно программировать против абстракции вместо реализации.Но абстракция не всегда интерфейс.Это может быть абстрактный класс.
public abstract class LogWriter
{
public abstract void Write(string message);
}
Итак, нет проблем создать макет абстрактного класса:
Mock<LogWriter> logWriter = new Mock<LogWriter>();
TaxCalculator calc = new TaxCalculator(logWriter.Object);
Если вы не проводите юнит-тестирование, я не вижулюбая проблема для передачи неабстрактных параметров, из-за принципа YAGNI.Если мне не нужна другая реализация ExceptionManager, то зачем мне над ней создавать абстракцию?Но если я сделаю TDD, то мне определенно понадобятся как минимум две реализации класса.Один настоящий и один макет / заглушка.
Кстати, будьте осторожны с анти-паттерном сервисного локатора .
ОБНОВЛЕНИЕ: Не получилось, что вы ссылаетесь на существующие классы Microsoft.Practices.EnterpriseLibrary (что мне не нравится).Я думаю, что это очередной провал проекта команды Microsoft.Practices.Создание «запечатанного» класса ExceptionManager, который не реализует никаких интерфейсов / базовых классов, убивает тестируемость.