Castle Windsor Свободная регистрация - что делает Pick()?

При использовании автоматической регистрации в замке Виндзор я вижу, что люди делают что-то вроде

_container.Register(
  AllTypes.Pick().FromAssembly(Assembly.GetExecutingAssembly())
    .WithService.FirstInterface());

Из жизни я не могу понять, что делает метод Pick(), и не могу найти какую-либо документацию. Кто-нибудь может мне это объяснить?

2 ответа

Решение

Pick(IEnumerable<Type>) это синоним From(IEnumerable<Type>), т.е. он выбирает указанные типы в качестве целей регистрации.

AllTypes.Pick() такой же как AllTypes.Of<object>(), поэтому он эффективно выбирает все типы.

AllTypes.Pick().FromAssembly(Assembly.GetExecutingAssembly()) выберет ВСЕ типы в исполняемой сборке (вы можете затем фильтровать, конечно)

Как обычно, взгляните на вики API и / или тестовый случай для получения дополнительной информации.

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

Container.Register(
        AllTypes.Pick()
        .FromAssemblyNamed("MyAssembly")
        .If(t => t.Name.EndsWith("ABC"))
        .Configure(c => c.LifeStyle.Is(LifestyleType.Transient))
        .WithService.Select(i => typeof(I))
    );

В этом примере все типы, выбранные из MyAssembly с именем, заканчивающимся на "ABC", будут добавлены в контейнер с временным образом жизни как сервисы типа I. Пример исходит из этого вопроса.

Это декларативный подход в форме внутреннего DSL. С этим видом API методы используются для настройки поведения, которое будет выполняться позже. Чтобы достичь этого, методы возвращают сборщиков, руководящих этапами настройки, в то время как фактическая работа выполняется в конце.

Другие вопросы по тегам