1

如何使用流利的配置将异常或日志拦截器添加到 Windsor 控制器工厂?

在我的引导程序容器中,我更新了我的安装程序以传递诸如 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>());
4

3 回答 3

4

我认为这应该工作......

_container.Register(
    Classes
        .FromAssemblyNamed(_assemblyName)
        .BasedOn<IController>()
        .LifestyleTransient()
        .Configure(component => component.Interceptors<LoggingAspect>()));
于 2012-11-09T20:18:52.250 回答
2

这是一篇关于创建自定义温莎控制器工厂的好文章。
带有 Windsor 的 ASP.NET MVC – 编程控制器注册

下面是如何使用流畅配置注册拦截器的示例。

将两者放在一起应该很容易。您只需将该.Interceptors<MyLoggingInterceptor>()行添加到您的 Windsor 控制器工厂的注册和/或您的控制器的注册中。

container.Register(
    Component
        .For<IInterceptor>()
        .ImplementedBy<MyLoggingInterceptor>(),
    Component
        .For<IInterceptor>()
        .ImplementedBy<MyArgumentInterceptor>(),
    Component
        .For<IDoStuff>()
        .ImplementedBy<DoStuff>()
        .Interceptors<MyLoggingInterceptor>()
        .Interceptors<MyArgumentInterceptor>());
于 2012-11-09T05:44:12.217 回答
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"));
于 2013-04-22T23:37:40.013 回答