【问题标题】:How to continue method flow using OnException aspect (PostSharp)?如何使用 OnException 方面(PostSharp)继续方法流?
【发布时间】:2012-05-11 14:14:02
【问题描述】:

我有以下代码:

[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");
            }

使用 FlowBehavior.Continue 结束 divide() 并返回 main() 方法。

【问题讨论】:

  • 嗯,你的方法用[OnExceptionAspect] 装饰,所以它会执行默认的 PostSharp OnExceptionAspect 行为,这没什么。你需要用[ExceptionAspectHandler] 来装饰它才能让你的代码工作

标签: c# visual-studio exception-handling aop postsharp


【解决方案1】:

请记住,OnException 方面将您的代码包装在 try/catch 中,因此代码将从 catch 继续(而不是重新抛出)并且其行为将默认返回。您是否希望它从引发异常的地方继续?如果是这样,您需要自己将该行显式包装在 try/catch 中。

请阅读http://www.sharpcrafters.com/blog/post/Day-6-Your-code-after-PostSharp.aspx了解更多详情。

【讨论】:

  • 从这篇博客文章中,看起来异常被自动重新抛出。如果将 FlowBeheavor 设置为 Continue,则不会重新引发异常。我认为这与这个答案中所说的相反。
【解决方案2】:

divide() 方法中使用的属性应该是 ExceptionAspectHandler(您已经创建),而不是 OnExceptionAspect。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    相关资源
    最近更新 更多