Нельзя и не следует универсально утверждать, что нужно и что нельзя делать в контексте внедрения зависимостей (DI). Это действительно зависит от типа проблемы, которую вы пытаетесь решить. Если единственной проблемой является тестируемость, то желательно скрыть все, что не является детерминированным или имеет побочные эффекты.
Обратите внимание, что это не включает Path.Combine
или Path.DirectorySeparatorChar
. Эти члены, IIRC, полностью детерминированы; они не обращаются к файловой системе, когда вы вызываете их.
Обычный подход к DI, однако, заключается в применении принципа обращения зависимостей (DIP). Согласно этому принципу, клиентский код решает и управляет формой полиморфных API, которые он использует. Как только клиентский код очистит требуемые интерфейсы, вы поймете, как реализовать эти интерфейсы.
Многие пытаются сопоставить тестируемость с файловой системой Windows, например, System.IO.Abstractions , но это полностью нарушает DIP. Вместо того, чтобы позволить клиентам определять форму интерфейсов, он позволяет реализации определять API. Это негерметичная абстракция , если это вообще абстракция.