2013-03-07 3 views
1

Я хочу найти имя контроллера и имя действия в режиме динамического прокси-перехватчика i проверить проверку трассировки трассировки не очень хорошо, но это не последнее в стеке это мой кодПолучить метод Caller (имя контроллера и имя действия) в методе перехватчика замка виндзора

глобальный asax замок конфигурации

IWindsorContainer ioc = new WindsorContainer(); 
ioc.Register(
Component.For<IMyService>().DependsOn() 
.ImplementedBy<MyService>() 
.Interceptors<MyInterceptor>() 
.LifeStyle.PerWebRequest); 

ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(ioc)); 
ioc.Register(
Component.For<IInterceptor>() 
.ImplementedBy<MyInterceptor>()); 

класс контроллера

private IMyService _service; 
public HomeController(IMyService service) 
{ 
    _service = service; 
} 
public ActionResult Index() 
{ 
    _service.HelloWorld(); 

    return View(); 
} 

класса обслуживания

public class MyService : IMyService 
{ 
    public void HelloWorld() 
    { 
     throw new Exception("error"); 
    } 
} 
public interface IMyService 
{ 
    void HelloWorld(); 
} 

перехватчик класса

//i want to find Controller name 

public class MyInterceptor : IInterceptor 
{ 
    public void Intercept(IInvocation invocation) 
    { 
     //?? controller name ?? method Name 
     invocation.Proceed(); 
    } 
} 

ответ

0

DynamicProxy не раскрывает информацию о вызывающем абоненте.

0

Я могу получить имя класса и имя метода в моем loggingInterceptor

использованием invocation.TargetType.Name

public class LoggingInterceptor : IInterceptor 
{ 
    ... 

    public void Intercept(IInvocation invocation) 
    { 
     try 
     { 
      this.Logger.InfoFormat(
       "{0} | Entering method [{1}] with paramters: {2}", 
       invocation.TargetType.Name, 
       invocation.Method.Name, 
       this.GetInvocationDetails(invocation)); 

      invocation.Proceed(); 
     } 
     catch (Exception e) 
     { 
      this.Logger.ErrorFormat(
       "{0} | ...Logging an exception has occurred: {1}", invocation.TargetType.Name, e); 
      throw; 
     } 
     finally 
     { 
      this.Logger.InfoFormat(
       "{0} | Leaving method [{1}] with return value {2}", 
       invocation.TargetType.Name, 
       invocation.Method.Name, 
       invocation.ReturnValue); 
     } 
    } 

} 
+0

спасибо, но я хочу Caller класса и метода не Called Class и метод! Я использую экземпляр Enterprise Library и работаю правильно – ARA