将方面应用于类中的所有方法/操作

时间:2016-09-16 17:02:44

标签: exception asp.net-mvc-5 postsharp

我正在使用ASP.NET MVC 5,我想记录控制器操作中发生的所有异常。

为了实现这一点,我使用PostSharp(在dll中)创建自定义方面,我已经创建了编写日志文件的代码,现在我希望方面可以在控制器范围内(不想手工应用于所有方法)。

方面的代码如下所示:

using System;
using PostSharp.Aspects;

namespace Banlinea.Ceb.Domain.Aspects
{
    public class LogException : OnExceptionAspect
    {
        public LogException()
        {
            ApplyToStateMachine = true;
        }

        public override void OnException(MethodExecutionArgs args)
        {
            //Code for logging the exception

            args.FlowBehavior = FlowBehavior.ThrowException;
        }
    }
}

现在,我想在控制器中做的是做这样的事情:

[LogException]
public class MyController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Other()
    {
        return View();
    }

    public ActionResult Another()
    {
        return View();
    }
}

装饰课程,我该怎么做?

2 个答案:

答案 0 :(得分:0)

你可以通过实施IAspectProvider

来做到这一点

http://doc.postsharp.net/iaspectprovider

MyApplication-0.0.1-SNAPSHOT.war

答案 1 :(得分:0)

您可以使用名为attribute multicasting的功能在代码库中应用PostSharp方面。

例如,在类级别或程序集级别应用方法级别方面时,它会自动复制到相应类或程序集中的所有方法。您还可以通过设置属性属性来过滤目标元素,例如AttributeTargetTypesAttributeTargetMemberAttributes等。

您问题中的示例代码实际上应该按预期工作。