具有 AOP 尝试捕获的数据库控制器 API

本文关键字:数据库 控制器 API AOP 具有 | 更新日期: 2023-09-27 18:35:33

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

我读了一堆文章,这一篇似乎是最好的例子:http://ayende.com/blog/3474/logging-the-aop-way。我遇到的一个问题是,在使用需要包装的函数接口解析容器后,您必须调用解析的容器才能调用这些函数之一。

我希望我的控制器的用户能够调用实现上述接口的我的类,并且对我在内部所做的工作一无所知,就 try catch 业务而言。

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

具有 AOP 尝试捕获的数据库控制器 API

如果你可以在PostSharp上花几美元,这里有一种方法可以实现这一点:

[Serializable]
public class PrintAndIgnoreExceptionAttribute : OnExceptionAspect
{
    public override void OnException(MethodExecutionArgs args)
    {
        Console.WriteLine(args.Exception.Message);
        args.FlowBehavior = FlowBehavior.Return;
    }
}

然后你用[PrintAndIgnoreException]来装饰你需要覆盖的方法。PostSharp也是所有AOP框架中性能最好的,因为额外的代码是在编译后编织的,所以没有运行时的损失。我不为他们工作,我只是在我这些天所做的几乎所有事情中使用它。