Я использую CollectionResolver (точнее, ListResolver) для поддержки сценариев, в которых мы хотим внедрить несколько реализаций интерфейса.На поведение CollectionResolver повлияли изменения в ResolveAll () в Castle 3. Ранее ResolveAll () возвращал только те реализации, которые могли быть разрешены, и молча игнорировал любые зарегистрированные реализации, которые не могли быть разрешены.Теперь ResolveAll () завершается ошибкой, если ЛЮБАЯ одна из зарегистрированных реализаций не может быть разрешена.
В общем, я думаю, что это хорошее изменение, так как оно гарантирует, что мы на самом деле получаем все реализации, которые мы считаем.Тем не менее, у меня есть пара сценариев, где я фактически использовал старое поведение в свою пользу.У меня есть инфраструктурный компонент (IBar), зарегистрированный общим установщиком, который зависит от коллекции IFoo (которая должна выполняться преобразователем коллекции).В общем установщике я также регистрирую некоторые реализации IFoo, но эти реализации зависят от служб, которые могут быть или не быть зарегистрированы.Идея состоит в том, что клиент может «активировать» такую реализацию IFoo, зарегистрировав зависимый сервис.Ранее, если клиент не регистрировал зависимость конкретного IFoo, эта реализация IFoo просто не была бы внедрена в IBar (и другие разрешимые реализации были бы).Теперь в этом сценарии не удается разрешить IBar, поскольку не удалось разрешить (ранее необязательный) IFoo.
Есть ли способ легко восстановить старое поведение?В идеале я хотел бы использовать новое поведение по умолчанию, но вернуться к старому поведению для конкретной службы (в этом случае IFoo).Я попытался создать реализацию IHandlersFilter для достижения этой цели, но обнаружил, что невозможно отфильтровать ВСЕ подходящие обработчики (вернуть пустой массив из SelectHandlers) - если я пытаюсь, Виндзор игнорирует фильтр и пытаетсяразрешить все кандидаты обработчики в любом случае.
Есть идеи?Я также открыт для совершенно другого подхода к достижению своей цели, если вы думаете, что я поступаю неправильно.