Касл Виндзор Свободно Проблема Регистрации - PullRequest
0 голосов
/ 23 августа 2010

У меня есть следующий класс: public class MainView : IHandle<MessageOne>,<br> IHandle<MessageTwo>...

Я хотел бы зарегистрировать все классы, реализующие хотя бы одну закрытую версию интерфейса IHandle <>, с быстрой регистрацией Castle Windsor, но она не работает,BasedOn (typeof (IHandleThe <>)) не выбирает правильные типы.Я использую следующее утверждение:

container.Register(AllTypes
                     .FromAssemblyNamed("MyAssembly")
                   //.If(t => t.Name.EndsWith("View")
                     .BasedOn(typeof(IHandleThe<>))
                     .Configure(registration => DoStuff())
                     .WithService.Base);

Приведенный выше код не входит в вызов Configure, но когда я комментирую строку BasedOn и раскомментирую строку If, он работает.Однако, если это не слишком полезно.У кого-нибудь есть идеи, что я делаю неправильно.

Любые идеи / помощь приветствуются

С уважением Gope

1 Ответ

0 голосов
/ 24 августа 2010

Это одна из менее интуитивных вещей в API.Если вы посмотрите на документацию , вы обнаружите, что Pick BasedOn и Where делают xor, поэтому приведенный выше код будет регистрировать два набора типов:

  1. Типы с именами, оканчивающимися на «Вид» (с конфигурацией по умолчанию, то есть как у них)

  2. Типы на основе IHandleThe<> (все они найденыв сборке предыдущее условие здесь не применяется) и настройте их для базовой службы, и независимо от того, что делает метод DoStuff.

Для достижения того, что вы хотите (на основе типа ANDесли имя заканчивается на If), сначала должен идти вызов BasedOn, все остальные должны идти после него.

...