Замок Виндзор - Укажите все перехватчики - PullRequest
1 голос
/ 12 ноября 2010
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 Ответ

1 голос
/ 13 ноября 2010

Это интересная проблема. Нет единого способа решить эту проблему в свободном API, в основном потому, что большую часть времени вы делаете хотите иметь точный контроль над тем, какие перехватчики применять и в каком порядке. Это хирургический инструмент.

В любом случае, если вы уверены, что вам нужно пойти по этому пути, сначала зарегистрируйте перехватчики, затем захватите их имена (через container.Kernel.GetAssignableHandlers(typeof(IInterceptor))) и в цикле примените их все к компоненту.

...