Обычно, когда я использую синглтон, это только для рефакторинга от большего зла, а именно класса, полного статических методов. Одна хитрость, которую я использовал, когда мне нужно передать зависимость для построения, - это иметь два метода «экземпляра» (или метод «конструкция» и «экземпляр»): один принимает аргумент, а другой нет. Тот, который принимает аргумент, должен быть вызван первым, и при повторном вызове выдаст ошибку. Версия без параметров выдаст ошибку, если она вызывается раньше другой.
Это означает, что вы должны быть осторожны при использовании синглтона, но, по крайней мере, вы должны быстро выяснить во время выполнения, если вы делаете это неправильно. Я надеюсь (как в моем, так и в вашем случае), что это всего лишь шаг на пути к чему-то лучшему.
Я использую Java, но я предполагаю, что в C # все работает примерно так же.