如何使用流畅配置将异常或记录拦截器添加到Windsor Controller Factory?
在我的bootstrapper容器中,我新建了我的安装程序以传递诸如assemblyName之类的值。
在我的ControllerInstaller中,我这样做,我认为这是错误的,为什么它不起作用:
container.Register(
Classes
.FromAssemblyNamed(_assemblyName)
.BasedOn<IController>()
.LifestyleTransient(),
Component
.For<IController>()
.ImplementedBy<Controller>()
.Interceptors(InterceptorReference.ForType<LoggingAspect>())
.Anywhere);
在我的loggingAspect安装程序中,我这样做:
container.Register(
Component
.For<IInterceptor>()
.ImplementedBy<LoggingAspect>());
答案 0 :(得分:4)
我认为这应该有用......
_container.Register(
Classes
.FromAssemblyNamed(_assemblyName)
.BasedOn<IController>()
.LifestyleTransient()
.Configure(component => component.Interceptors<LoggingAspect>()));
答案 1 :(得分:2)
这是一篇关于创建自定义Windsor控制器工厂的好文章 ASP.NET MVC with Windsor – programmatic controller registration
以下是如何使用流畅配置注册拦截器的示例。
把两者放在一起应该很容易。您只需将.Interceptors<MyLoggingInterceptor>()
行添加到windsor控制器工厂的注册和/或控制器的注册。
container.Register(
Component
.For<IInterceptor>()
.ImplementedBy<MyLoggingInterceptor>(),
Component
.For<IInterceptor>()
.ImplementedBy<MyArgumentInterceptor>(),
Component
.For<IDoStuff>()
.ImplementedBy<DoStuff>()
.Interceptors<MyLoggingInterceptor>()
.Interceptors<MyArgumentInterceptor>());
答案 2 :(得分:0)
另一种方法:
container.Register(
Component.For<IInterceptor>()
.ImplementedBy<ExceptionHandlerInterceptor>()
.LifeStyle.Is(LifestyleType.Transient)
.Named("ExceptionHandlerInterceptor"),
Component.For<IController>()
.ImplementedBy<Controller>()
.LifeStyle.Is(LifestyleType.Transient)
.Interceptors("ExceptionHandlerInterceptor"));