2

У меня на самом деле работает следующий код, но я действительно не уверен, как MVC или Ninject на самом деле могут привязать LogFilter к ILoggerMVCAttribute. Я предполагаю, что на каком-то уровне имеет смысл, что фильтр будет иметь атрибуты, но я просто не вижу, какая общность (интерфейс или базовый класс) позволяет это произойти. Просто пытаюсь получить лучшее понимание, в случае, если мне нужно снова сделать что-то подобное в будущем. Заранее спасибо.Как Ninject и MVC разрешают этот настраиваемый атрибут настраиваемого фильтра действий?

//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); 
} 

ответ