带有AOP Try Catch的Database Controller API

时间:2014-12-26 23:35:26

标签: c# exception-handling aop cross-cutting-concerns

我正在为数据库操作创建一个api,我必须用try catch包装api中的每个函数调用。我基本上试图在python中获得与装饰器相同的功能。

我阅读了很多文章,这个文章似乎是最好的例子:http://ayende.com/blog/3474/logging-the-aop-way。我遇到的一个问题是,在使用需要包装的函数接口解析容器之后,必须对已解析的容器进行调用以调用其中一个函数。

我希望我的控制器的用户能够只调用我的类来实现上面的接口,并且对try catch业务内部所做的事情一无所知。

这可能吗? 如果解决方案很简单,我很抱歉,我对C#没有多少经验。 感谢。

1 个答案:

答案 0 :(得分:0)

如果你可以在PostSharp上花几块钱,这是实现这个目标的一种方法:

[Serializable]
public class PrintAndIgnoreExceptionAttribute : OnExceptionAspect
{

    public override void OnException(MethodExecutionArgs args)
    {
        Console.WriteLine(args.Exception.Message);
        args.FlowBehavior = FlowBehavior.Return;
    }
}

然后使用[PrintAndIgnoreException]来装饰需要涵盖的方法。 PostSharp也是所有AOP框架中性能最佳的,因为额外的代码在后编译中编织,因此没有运行时惩罚。我不为他们工作,我只是在我现在所做的一切事情中使用它。