Я бы порекомендовал внедрение конструктора, особенно если у вас есть много зависимостей для внедрения, только если вы используете платформу Dependency Injection, такую как Unity или Ninject. Рефакторинг существующей кодовой базы для добавления инжектора конструктора везде обычно грязный, и, вероятно, требует хранения всех сервисов в локальных переменных во многих базовых классах, просто чтобы вы могли передать их классам дальше по цепочке.
В этом случае я бы использовал некоторую реализацию шаблона ServiceLocator с одним статическим классом ServiceLocator / Container, который вы можете использовать для доступа к вашим нестатическим службам:
IService _service = ServiceLocator.GetService<IService>();
Для этого потребуется минимальный объем рефакторинга в существующем коде (просто замените MyService.DoSomething()
на _service.DoSomething()
, и все же вы сможете смоделировать и протестировать свой код, заменив интернет-коллекцию ServiceLocator:
ServiceLocator.Register<IService>(myFakeService);