Castle Windsor - 指定所有拦截器

时间:2010-11-12 20:32:55

标签: castle-windsor

container
    .Register
    (
        AllTypes
            .FromAssemblyContaining<TestInterceptor>()
            .BasedOn<IInterceptor>()
            .Where(t => t.Name.EndsWith("Interceptor"))
            .WithService.AllInterfaces()
            .Configure(c => c.LifeStyle.Transient),

        Component
            .For<IRepository>()
            .ImplementedBy<LogRepository>()
            .Interceptors
            (
                InterceptorReference.ForType<TestInterceptor>(),
                InterceptorReference.ForType<TestTwoInterceptor>(),
                InterceptorReference.ForType<TestThreeInterceptor>()
            ).Anywhere
    );

是否有一种简单的方法来指定组件将使用所有拦截器而不必指定每个拦截器?

1 个答案:

答案 0 :(得分:1)

这是一个有趣的问题。在流畅的API中没有开箱即用的方法来解决它,主要是因为大多数时候你希望对要应用的拦截器以及按什么顺序进行细粒度控制。这是一种外科手术工具。

无论如何,如果你确定你需要先这样注册拦截器,然后抓住他们的名字(通过container.Kernel.GetAssignableHandlers(typeof(IInterceptor)))并在循环中将所有这些应用到组件中。