【发布时间】: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