Таким образом, вы можете обернуть критические части в try / catch, и, по крайней мере, это означает, что тип не сможет не инициализироваться, но, безусловно, если код инициализации настолько критичен, то это поведение на самом деле хорошо - тип не пригоден для использования в этом неинициализированном состоянии.
Другой вариант - сделать это как одиночный файл - каждый раз, когда вы пытаетесь получить экземпляр, вы можете правильно создать тип, пока не добьетесь успеха, даже если он потерпит неудачу в первый раз.
Вам все равно потребуется некоторая обработка ошибок для вызывающей стороны на случай, если Instance вернет вам ноль в первый (или второй и т. Д.) Раз.
Редактировать: И если вам не нужен синглтон, просто попросите ваш конструктор экземпляра инициализировать статические части
, например
private object _lock = new object()
private bool _initialized;
public T()
{
lock(_lock)
{
if(!_initialized)
{
try
{
//Do static stuff here
}
catch(Exception ex_)
{
//Handle exception
}
}
}
}