【发布时间】:2013-12-12 19:36:04
【问题描述】:
我实际上有以下代码可以工作,但我真的不确定 MVC 或 Ninject 是如何将 LogFilter 绑定到 ILoggerMVCAttribute 的。我想在某种程度上过滤器具有属性是有道理的,但我只是没有看到什么共性(接口或基类)允许这种情况发生。只是想获得更好的理解,以防将来我需要再次做类似的事情。提前致谢。
//Basic trimmed down code
//Custom Action Filter
public class LogFilter : System.Web.Mvc.IActionFilter
{
public class ILogger logger {get;set;}
public LogFilter(ILogger logger)
{
this.logger = logger;
}
public void OnActionExecuted(System.Web.Mvc.ActionExecutedContext filterContext)
{
LogRequest(logger);
}
public void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
{
}
}
//Custom Action Filter Attribute
public class ILoggerMVCAttribute : FilterAttribute { }
//Ninject binding the action filter to the action filter attribute.
this.BindFilter<LogFilter>(System.Web.Mvc.FilterScope.Controller, 0)
.WhenControllerHas<ILoggerMVCAttribute>();
为了记录,我最终没有使用上述方法进行日志记录。我能够在 Global.asax LogRequest 中获取我的记录器的当前实例,如下所示。
protected void Application_LogRequest(Object sender, EventArgs e)
{
ILogger log = this.Kernel.Get<ILogger>();
LogRequest(log);
}
【问题讨论】:
标签: asp.net-mvc-4 ninject inversion-of-control action-filter actionfilterattribute