Aop,Unity,拦截器和ASP.NET MVC控制器操作方法

时间:2009-08-27 13:36:02

标签: .net log4net unity-container aop

使用log4net,我们希望记录对ASP.NET MVC控制器操作方法的所有调用。

日志应包含有关传递给控制器​​的任何参数的信息。

我们希望使用Interceptors via Unity的AoP方法,而不是在每个动作方法中对此进行手工编码。

我们已经使用了一些其他使用接口的类(使用InterfaceInterceptor)。但是,我们不确定如何继续使用我们的控制器。我们是应该稍微重新使用它们来使用接口,还是有更简单的方法?

修改

VirtualMethodInterceptor似乎是正确的方法,但是使用此方法会导致以下异常:

System.ArgumentNullException: Value cannot be null.
Parameter name: str
   at System.Reflection.Emit.DynamicILGenerator.Emit(OpCode opcode, String str)
   at Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.PreBuildUp(IBuilderContext context)
   at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)

2 个答案:

答案 0 :(得分:1)

你见过 this [link broken]

以下是David Hayden提供的破损/遗失博客的摘录

以下是使用企业库日志记录应用程序阻止LogFilterAttribute来记录邮件的LogWriter

public class LogFilterAttribute : ActionFilterAttribute
{
    public LogWriter Logger { get; set; }

    public string Category { get; set; }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        string message = string.Format(
            "{0} ActionMethod on {1}Controller executing...",
            filterContext.ActionDescriptor.ActionName,
            filterContext.ActionDescriptor.ControllerDescriptor.ControllerName);

        var category = Category ?? "General";

        Logger.Write(new LogEntry {
            Message = message,
            Categories = new[] { category }
        });
    }
}

答案 1 :(得分:0)

不完全是您的要求,但您可能需要考虑log4postsharp。也许你还需要this,但我无法确定,因为到目前为止我还没有使用ASP.Net MVC