У меня на самом деле работает следующий код, но я действительно не уверен, как 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);
}
Спасибо за указал мне в правильном направлении. Это помогает понять, почему работает код. – conroyrw