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 методы используются для настройки поведения, которое будет выполняться позже. Чтобы достичь этого, методы возвращают сборщиков, руководящих этапами настройки, в то время как фактическая работа выполняется в конце.