6

我想创建一个属性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
        }
    }
}

这可能吗 ?

4

1 回答 1

3

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

因此,下载 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(){}
}
于 2012-11-02T12:26:40.533 回答