2012-05-11 7 views
5

Tengo el siguiente código:¿Cómo continuar el flujo del método usando el aspecto OnException (PostSharp)?

[Serializable] 
    class ExceptionAspectHandler:OnExceptionAspect 
    { 
     public override void OnException(MethodExecutionArgs args) 
     { 
      Console.WriteLine("{0}", args.Exception); 
      args.FlowBehavior = FlowBehavior.Continue; 
     } 
    } 

    [OnExceptionAspect] 
    public static void divide() 
      { 
       int n = Convert.ToInt32(Console.ReadLine()); 
       var a = 100/n; //the exception happens here 
       Console.WriteLine("it should get here"); 
      } 

Usando FlowBehavior.Continue termina dividir() y vuelve al método main().

+0

Um, su método está decorado con '[OnExceptionAspect]' por lo que hará el comportamiento predeterminado PostSharp 'OnExceptionAspect' que no es nada. Debes decorarlo con '[ExceptionAspectHandler]' para que funcione tu código – Shevek

Respuesta

4

Recuerde, el aspecto OnException envuelve su código en un try/catch para que el código continúe desde el catch (en lugar de volver a lanzar) y su comportamiento regrese por defecto. ¿Quieres que continúe desde donde arrojó la excepción? Si es así, debe envolver explícitamente esa línea en un try/catch usted mismo. Para obtener más detalles, lea http://www.sharpcrafters.com/blog/post/Day-6-Your-code-after-PostSharp.aspx.

+1

Desde esta publicación de blog, parece que la excepción se vuelve a lanzar automáticamente. Si configura FlowBeheavor para continuar, la excepción no se vuelve a lanzar. Creo que eso es lo opuesto a lo que se dice en esta respuesta. – Chris

+0

@Chris estás en lo correcto. Typo de mi parte. –

0

El atributo utilizado en el método de divide() debe ser ExceptionAspectHandler (que ha creado), no OnExceptionAspect.

Cuestiones relacionadas