Я использую Castle Windsor 4.1.1.Для простоты я создал демо для иллюстрации проблемы:
Это инициализация контейнера:
using(var container = new WindsorContainer())
{
container.Kernel.AddHandlerSelector(new HandlerSelector());
// Should not call handler selector
container.Register(Component.For<IA>().ImplementedBy<AImpl>());
container.Register(Component.For<IB>().ImplementedBy<BImpl>());
// Should call handler selector
container.Resolve<IA>();
}
AImpl
зависит от IB
.(Просто введение в конструктор)
Когда я звоню container.Register
, он вызывает HasOpinionAbout
и SelectHandler
.
Вопрос довольно простой. Это должно работать так?
Вот цитата из официальной документации :
Селекторы обработчиков позволяют динамически выбирать компонентчтобы удовлетворить запрошенный сервис и переопределить поведение Windsor по умолчанию.Это особенно полезно в мультитенантных приложениях.
Я ожидал, что эти функции должны вызываться только во время разрешения, а не во время регистрации.(Их вызывают как во время разрешения, так и при регистрации.)
Они ясно заявляют, что это полезно для мультитенантных приложений, поэтому в большинстве случаев арендатор определяется во время разрешения, а не во время регистрации.
Правильно ли мое предположение?
GitHub Issue # 461