Aop, Unity, перехватчики и методы действий контроллера ASP.NET MVC - PullRequest
1 голос
/ 27 августа 2009

Используя log4net, мы хотели бы регистрировать все вызовы наших методов действия контроллера ASP.NET MVC.

Журналы должны содержать информацию о любых параметрах, которые были переданы в контроллер.

Вместо того, чтобы вручную кодировать это в каждом методе действия, мы надеемся использовать подход AoP с перехватчиками через Unity .

У нас уже есть эта работа с некоторыми другими классами, которые используют интерфейсы (используя 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 ]

1 голос
/ 27 августа 2009

Вы видели это [ссылка битая]

Ниже приводится выдержка из прерванного / отсутствующего сообщения в блоге, предоставленная Дэвидом Хейденом

Вот LogFilterAttribute, который использует Блок приложения ведения журнала Enterprise Library 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 }
        });
    }
}
0 голосов
/ 29 августа 2009

не совсем то, что вы просите, но вы можете рассмотреть log4postsharp . может быть, вам понадобится это , но я не могу точно сказать, так как я до сих пор не использовал ASP.Net MVC

...