我正在为数据库操作创建一个 api,我必须用 try catch 包装 api 中的每个函数调用。我基本上是在尝试获得与 python 中的装饰器相同的功能。
我读了一堆文章,这一篇似乎是最好的例子:http://ayende.com/blog/3474/logging-the-aop-way。我遇到的一个问题是,在使用需要包装的函数接口解析容器后,您必须调用解析的容器才能调用这些函数之一。
我希望我的控制器的用户能够调用实现上述接口的我的类,并且对我在内部所做的工作一无所知,就 try catch 业务而言。
这可能吗?如果解决方案很简单,我很抱歉,我对 C# 没有太多经验。谢谢。
如果你可以在PostSharp上花几美元,这里有一种方法可以实现这一点:
[Serializable]
public class PrintAndIgnoreExceptionAttribute : OnExceptionAspect
{
public override void OnException(MethodExecutionArgs args)
{
Console.WriteLine(args.Exception.Message);
args.FlowBehavior = FlowBehavior.Return;
}
}
然后你用[PrintAndIgnoreException]
来装饰你需要覆盖的方法。PostSharp也是所有AOP框架中性能最好的,因为额外的代码是在编译后编织的,所以没有运行时的损失。我不为他们工作,我只是在我这些天所做的几乎所有事情中使用它。