【问题标题】:How does Ninject and MVC resolve this custom attribute to the custom action filter?Ninject 和 MVC 如何将此自定义属性解析为自定义操作过滤器?
【发布时间】: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


    【解决方案1】:

    【讨论】:

    • 感谢您为我指明正确的方向。它有助于理解代码工作的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多