He buscado alrededor de SO para obtener una respuesta a esto, y la mejor que puedo encontrar hasta ahora es here, sin embargo, está dirigida a instancias con constructores estáticos; Solo estoy usando la clase estáticamente.Excepción en el constructor estático
Mi código:
public static class MailHelper {
private static string mailHost;
static MailHelper() {
var mailSettings = ConfigurationManager.GetSection("MailSettings") as NameValueCollection;
if (null == mailSettings) {
throw new ConfigurationErrorsException("Missing Mail Settings in the configuration file");
}
mailHost = ConfigurationManager.AppSettings["mailHost"];
if (null == mailHost) {
throw new ConfigurationErrorsException("Missing mailHost setting in the configuration file");
}
}
public static void SendMail(MailMessage Message) {
...
}
}
try {
MailHelper.SendMail(Message);
}
catch (ConfigurationErrorsException exc) {
...
}
// ???
MailHelper.SendMail(Message);
.
Así que si el constructor estático produce una excepción de la primera vez que se llama, lo que sucede la segunda vez que intento acceder al método estático SendMail()?
PD: Disculpe si no le gusta la versión de Stroustrup de K & R, pero no edite mi publicación solo para cambiar las llaves de su estilo Allman preferido. Gracias.
Debería fallar, pero ¿qué hay de malo en probarlo usted mismo? –
No creo que realmente tenga sentido lanzar desde un constructor (estático), porque entonces la clase está en un estado inestable (no se ha inicializado por completo). ¿Qué tal crear una función 'Init()' explícita a la que llame antes de usarla (no debería hacer nada si ya se ha inicializado), y si arroja una excepción, * no use la clase * – Cameron
Pontus> Pensé que Jon podría necesitar alguna más puntos:) –