Если у вас есть такая зависимость, как ITimer
, которую вы явно не хотите видеть в интерфейсе, то это звучит как деталь реализации, поэтому правильно , что она не определена как частьконтракта.Один из подходов - «забыть о ITimer
; это может понадобиться только некоторым реализациям, и это касается преобразователя IoC / DI».
Конструкторы, очевидно, не являются частью интерфейса.Единственное, о чем я могу подумать (сохраняя IMyInterface
вне API), это иметь интерфейс IMyInterfaceFactory
, с методом Create
, который принимает ITimer
- но это затем вызывает конкретный набор зависимостей, которые могут не отражать фактические реализации.
Если ни один из вышеперечисленных наборов и ITimer
не является по существу частью интерфейса, я бы сделал это формально часть интерфейса.