用属性处理类库中的异常

时间:2016-03-22 08:36:36

标签: c# error-handling

在类库中,我尝试使用类库中的属性处理异常。有没有办法没有AOP(PostSharp)?

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public class HandleError : Attribute
{

    public void OnException(){
    try {

    }
    catch (Exception) {

    }}
}

我想装饰这样的属性。

[HandleError]
public void SampleMethod()
{
  throw new Exception();
}

1 个答案:

答案 0 :(得分:2)

简单地说,你不能轻易。您可以使用其他库中的AOP(for example Spring.NET)。唯一的区别是Spring.NET在运行时工作,而Postsharp在编译时工作。

你甚至可以使用Fody在编译时进行一些代码重写,比如PostSharp。

请注意,如果您只是想对异常进行一些日志记录而不需要从堆栈中删除异常(您不想“吃掉”或更改它),那么您只需添加一个FirstChanceException处理程序。请注意,这会减慢所有内容,因为您需要使用反射来检查属性的存在。如果你想走栈,它会变得更慢! (而且更复杂)