Замок Виндзор: SelectHandler должен вызываться только во время разрешения? - PullRequest
0 голосов
/ 29 декабря 2018

Я использую 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

1 Ответ

0 голосов
/ 01 января 2019

Вам нужно использовать другой образ жизни (чем Singleton, который используется по умолчанию), если вы хотите иметь возможность иметь разные экземпляры компонентов для разных арендаторов.

...