将使用try {} catch包装类中所有方法的属性

时间:2012-11-02 12:22:54

标签: c# .net

我想创建一个属性HandleError,我会把它放在这样的类上:

[HandleError]
public class Foo
{
   public void Do(){}
...
   public void Don(){}
}

它会将所有方法包装在try catch中,所以我认为它应该是这样的:

public class HandleErrorAttribute : Attribute
{
    public void Execute()
    {    
        try
        {
            method.Execute();
        }
        catch(Exception ex)
        {
            //log
        }
    }
}

这可能吗?

1 个答案:

答案 0 :(得分:3)

你正在寻找类似PostSharp的东西,这值得实施。但是,实施远远超出了这个问题的范围。看看这个link,你会发现它正在做你想要的。

因此,请下载PostSharp,开始使用它,如果您对此有更多疑问,那么我们就能帮到您。但是,他们的文档非常好,实施起来很好。

[Serializable]
public class MyExceptionHandling : OnMethodBoundaryAspect
{
    public override void OnException(MethodExecutionArgs args)
    {
        // here you would perform the logging
    }
}

然后在您的方法上,您将使用新属性标记它:

public class Foo
{
    [MyExceptionHandling]
    public void Do(){}
    [MyExceptionHandling]
    public void Don(){}
}