我正在为数据库操作创建一个api,我必须用try catch包装api中的每个函数调用。我基本上试图在python中获得与装饰器相同的功能。
我阅读了很多文章,这个文章似乎是最好的例子:http://ayende.com/blog/3474/logging-the-aop-way。我遇到的一个问题是,在使用需要包装的函数接口解析容器之后,必须对已解析的容器进行调用以调用其中一个函数。
我希望我的控制器的用户能够只调用我的类来实现上面的接口,并且对try catch业务内部所做的事情一无所知。
这可能吗? 如果解决方案很简单,我很抱歉,我对C#没有多少经验。 感谢。
答案 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框架中性能最佳的,因为额外的代码在后编译中编织,因此没有运行时惩罚。我不为他们工作,我只是在我现在所做的一切事情中使用它。