Я знаю, что уже поздно отвечать на первоначальный вопрос, но у меня была эта проблема, и вот как я ее решил. Не может быть идеальным, но, похоже, работает.
Я создал метод Init, который необходимо вызвать, прежде чем пытаться использовать экземпляр singleton.
public void Init(/*parameters*/)
{
if (_isInitialized)
{
throw new InvalidOperationException("Component is already initialized!");
}
//do your work here
}
Любой другой доступ к экземпляру синглтона (свойства get, set, вызовы методов) вызовет недопустимое исключение операции, сообщающее, что объект не был инициализирован.
Я думаю, что это делает то, что мне нужно, менее запутанно, чем GetInstance (params), потому что нет риска недопонимания того, что делает метод. Недостатком является то, что он не будет выдавать ошибки времени компиляции, но первый запуск без инициализации вызовет исключение, поэтому оно должно быть достаточно хорошим.