【问题标题】:AOP Postsharp - Aspect attributes not workingAOP Postsharp - 方面属性不起作用
【发布时间】:2017-03-21 19:28:25
【问题描述】:

我正在尝试使用 MVC 项目使用简单的 AOP 方法。安装了 postharp 快递版和数据包。我有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 的属性的额外代码。 附言:是的,我尝试过清理和重建(比如数百万次)。

【问题讨论】:

  • 在开始在 ASP.NET MVC 中使用自定义过滤器之前,您应该在 FilterConfig 类中注册它。本文Filters in MVC 描述了如何在 ASP.NET MVC 中创建、注册和使用自定义过滤器.
  • 它不是一个标准的属性类,顺便说一句,我尝试过的第一件事,但还是一样。 postsharp 必须在我的操作之前注入字节码属性 onentry 操作。我检查我的字节码添加后没有任何变化
  • 请先检查 PostSharp 是否在构建时运行。构建日志中应该有来自 PostSharp 的消息。 PostSharp NuGet 包是否成功安装到您的项目中?在 *.csproj 文件中应该有引用 PostSharp.targets 的 Import 行。

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


【解决方案1】:

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

这都是关于 postsharp VS 扩展和策略设置的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多