1

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

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

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

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

4

1 回答 1

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 框架中性能最好的,因为额外的代码是在编译后编织的,所以没有运行时损失。我不为他们工作,我只是在这些天所做的几乎所有事情中都使用它。

于 2014-12-26T23:52:51.277 回答