AOP Postsharp - Aspect属性不起作用

时间:2017-02-25 21:00:03

标签: c# asp.net-mvc aop postsharp

我正在尝试使用MVC项目进行简单的AOP方法。安装postharp express版和数据包。我有2个项目,第一个是方面模块,第二个是休闲mvc项目。

所以我创建了一个自定义日志属性,其中包含了提供postsharp的方面

[Serializable]
 public class LogAttribute : OnMethodBoundaryAspect
    {
        public LogAttribute()
        {
        }
        public override void OnEntry(MethodExecutionArgs args)
        {                
            Log.Instance.Info(args.Arguments[0]);

            base.OnEntry(args);
        }

        public override void OnExit(MethodExecutionArgs args)
        {
            Log.Instance.Info(args.Arguments[0]);
            base.OnExit(args);
        }

        public override void OnException(MethodExecutionArgs args)
        {
            Log.Instance.Error(args.Exception,args.Method.Name);
            base.OnException(args);
        }
    }

这是我的家庭控制器

[Log]
    public class HomeController : Controller
    {

        public HomeController()
        {
        }

        public ActionResult Index( )
        {
            Debug.WriteLine("start");            
            return View();
        }
}

Postsharp文档非常清楚,但我的属性从未遇到任何方法。我尝试了各种属性用法和其他东西,但仍然没有任何反应。 我还尝试使用和不使用Log属性检查我的控制器的IL代码。实际上似乎没有来自postsharp属性的额外代码。 附: :是的,我尝试过清洁和重建(比如数百万次)。

1 个答案:

答案 0 :(得分:0)

经过艰苦的努力,我想通了。当我们想在项目中使用Postsharp时,我们必须添加Postsharp VS扩展。安装postharp扩展后,我们必须登录并检查我们的postharp策略,以使用postharp属性(或自定义派生的postharp属性)来定位我们的类。  Postsharp为快递版提供10个目标类。编译后检查postharp进程的输出,如果成功,postharp会将IL代码注入我们使用aspect属性标记的方法。  如果我们做的一切正确,我们可以获得会话,用户等所有内容都可以记录而无需任何解决方法也提供了简单的缓存机制。

全部关于postharp VS Extension&政策设置。