Я предлагаю другой подход, который устраняет необходимость в этом ...
Класс Scheduler реализует шаблон синглтона для управления его построением.Вы должны быть в состоянии абстрагировать вещи, которые зависят от IScheduler
от способа, которым он построен.Поэтому что-то иначе должно нести ответственность за управление построением планировщика: оно не должно делать это само, потому что построение не является ответственностью этого класса ( принцип единственной ответственности ).
Общепринятыми подходами к этому являются использование группового набора фабричного метода или шаблона локатора службы (например, UnityContainer от Microsoft).Любой из них может быть направлен на то, чтобы выставить этот класс как одноэлементный, оставляя класс просто реализацией того, за что отвечает класс.
Внедрение зависимости завершает головоломку, потому что когда классы имеютих зависимости вводятся, тогда они сами отвлекаются от построения вещей, которые они используют.Таким образом, класс, которому требуется IScheduler
, должен был бы внедрить один и использовать его.
С этими шаблонами необходимость делать то, что запрашивается в вопросе, исчезает, и приводит к коду с четким разделением интересов..
Сноска: я знаю, что эти паттерны могут выглядеть пугающими, и может показаться, что для этого нужно приложить немало усилий, и может быть трудно увидеть выгоду;но поверьте мне: попробуйте это (и я действительно имею в виду попробовать это, вы не можете просто сделать нерешительную попытку, потому что это довольно постепенный переход в подходе).Раньше я писал код, как вы написали.Мне посоветовали взглянуть на эти закономерности.У меня были серьезные сомнения, но я никогда не оглядывался назад, и теперь я пишу весь свой код таким образом.