2011-06-09 5 views
5

Quiero suscribirme al evento AppDomain.CurrentDomain.UnhandledException para detectar cualquier error cuando intento un nuevo patrón de diseño en el que no quiero ponerle un try catch en cada evento.¿Puedo agregar un controlador a AppDomain.CurrentDomain.UnhandledException en una biblioteca de clase

generalmente en una aplicación de formularios win hay un punto de entrada principal, pero esta es una biblioteca de clases a la que llama otra aplicación.

¿Hay un punto de entrada principal en una biblioteca de clase donde puedo conectar este evento, o simplemente no es posible en una biblioteca de clase a menos que esté seguro de que se llamará a un método antes que cualquier otra cosa?

+0

@Jodrell - gracias, pero ¿puedo usar el atributo [STAThread] para definir una ubicación en mi ensamblaje que se llamará automáticamente? Esto no es un archivo ejecutable, y la aplicación de llamada puede crear una instancia de cualquier formulario en cualquier orden. Por eso tendría que suscribirme a este evento antes de que ocurra algo de eso – WraithNath

+0

Algo así como conectar aplicaciones .Net – Jodrell

+1

podrías hacer algo en esta línea http://www.codingthewheel.com/archives/how-to-inject -a-managed-assembly-dll – Jodrell

Respuesta

1

No, las bibliotecas de clases no tienen un punto de entrada principal. Si sientes que necesitas uno, entonces podrías crear uno virtualmente a través de tu área de superficie API pública. En otras palabras, limite qué objetos son públicos y en esos objetos públicos asegúrese de que la llamada se realice en algún momento. Eso podría llevar al extremo de requerir algún tipo de llamada de fábrica para configurar su biblioteca antes de hacer cualquier cosa.

+0

Gracias, eso es lo que pensé. Esperaba que hubiera algún tipo de evento en el que pudiera engancharme cuando se cargara el ensamblaje. Desafortunadamente no puedo conectarme a nada desde la aplicación de llamada. Parece que esto tendrá que esperar hasta que mi próximo ejecutable – WraithNath

0
// Set the unhandled exception mode to force errors to go through our handler. 
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 

// Add the event handler for handling thread exceptions to the event. 
AppDomain.CurrentDomain.UnhandledException += 
    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 

Gracias a Brian Dishaw

Es evidente que esto no le otorga alguna manera no declarativa de asignar el manejador, ala assingning una escucha de seguimiento en app.config pero, eso me da una idea.

Puede escribir su propia sección de configuración que realice este código. Luego, cuando se carga la configuración, puede asignar el controlador de eventos, encontraré algunos enlaces sobre cómo hacerlo ...

Sin embargo, su configuración debería estar presente en la aplicación principal, por lo que tal vez esto no sea correcto .

EDIT Lo sentimos, no creo que haya manera de hacer esto sin un framework IoC de algún tipo, qué más cargaría su clase. Las únicas opciones que puedo pensar en todas requieren algún tipo de cambio en la aplicación principal.

Me interesa equivocarme.

+0

Gracias - Ya sé sobre el evento de excepción no controlada (está en el título de la pregunta). Mi pregunta es si hay un punto de entrada en la biblioteca de la clase donde puedo conectar esto antes de que se llame a cualquier otra cosa. – WraithNath

+0

Tengo su punto ahora, y he agregado un poco más, más viene – Jodrell

+0

Fallo, no puedo pensar en nada que cumpla con el escrito. – Jodrell

Cuestiones relacionadas