2010-06-25 3 views
3

Я звоню в Kernel.RemoveComponent на моем контейнере Windsor и возвращает false. Я знаю, что компонент присутствует (я проверил, вызвав GetHandler с тем же ключом, и он возвращает ожидаемую информацию) ... так почему я не могу удалить мой компонент из контейнера? Как я могу устранить эту проблему?Castle Windsor RemoveComponent False

У меня есть куча проверки подлинности и авторизации, которая происходит в независимых обработчиках и компонентах в моих WCF-сервисах до того, как установлен OperationContext (OpertaionContext.Current по-прежнему равен нулю). В течение этого периода мне нужен доступ к сообщению запроса из контекста запроса. Я хотел бы сохранить экземпляр RequestContext в моем контейнере с целым потоком жизни. При каждом новом запросе мне нужно перезаписать этот экземпляр, чтобы я не получил неверное сообщение запроса. Это просто не очень хорошая задача для Виндзора? Если я не могу удалить компонент перед повторной регистрацией каждого нового RequestContext, тогда все RequestContext никогда не будут удалены, не так ли?

Спасибо!

ответ

2

RemoveComponent не удаляет компонент, если в зависимости от него есть другие компоненты. Почему вы удаляете компонент вместо того, чтобы не помещать его в контейнер в первую очередь?

+0

Я хочу, чтобы мой контейнер автоматически попытался удалить существующий компонент, если зарегистрирован дублирующий/конфликтный компонент, а не выбрасывает исключение. Например, у меня есть класс TraceLogger, который по умолчанию является ILogger. Далее по дороге после запуска приложения я хочу заменить эту регистрацию DBLogger ILogger, в которой есть пользовательский активатор и некоторые другие специальные свойства. Что я регистрирую свой DBLogger, я хочу, чтобы контейнер попытался сначала удалить TraceLogger, поэтому не возникает ошибка. – Jeff

+0

Звучит не так. Почему вы меняете контейнер после его настройки? Почему бы не использовать их в контейнере, и если вам нужно выбрать один, используйте 'IHandlerSelector' или' ISubDependencyResolver'? –

+0

Непонятно, что поведение службы должно меняться после запуска? Или это не похоже на правильный подход, чтобы отменить регистрацию предыдущего внедрения до предоставления нового? Если первое, почему? Я могу думать о множестве ситуаций, когда мне хотелось бы динамического поведения службы. Почему использование ILogger по умолчанию, переопределенное позднее, не имеет смысла? Благодарю. – Jeff

Смежные вопросы