Windsor.Castle меняет IHandler где. - PullRequest
       11

Windsor.Castle меняет IHandler где.

2 голосов
/ 13 февраля 2012

Я работал с MEF и Windsor в новом проекте.Я только что обновил свои виндзорские пакеты и теперь мой код ломается.Где мы используем:

из MefContrib.Samples

 private void RegisterCastleComponent(IHandler handler)
 {
    var name = handler.ComponentModel.Name;
    var type = handler.Service;
    // By default, Windsor assigns implementation's full name for the key,
    // but for a default key we want to pass null instead
    if (handler.ComponentModel.Implementation.FullName == name)
    {
        name = null;
    }

       OnRegisteringComponent(type, name);
 }

Виндзор не имеет .Service в своем IHandler в Castle.Windsor.dll, v4.0.30319

Как мне реализовать вышеизложенное?

Я могу получить .Services, который является IEnumerable.Должен ли я просто зарегистрировать их всех, первый?Каковы последствия?

Почему сейчас есть .Services?

Спасибо

На самом деле, пошел и проверил BreakingChanges.txt:

==================================================================== изменить - Перестроено, как компоненты, представляющие несколько сервисов, обрабатываются внутри.Это включает несколько изменений в API: класс ForwardingHandler и метод IHandlerFactory.CreateForwarding были удалены.Свойство ComponentModel.Service удалено, заменено свойствами ClassService и InterfaceServices.Также был добавлен метод AddService.Аргумент конструктора для службы был изменен на Type [] вместо одного Type.Свойство IHandler.Service было удалено, заменено свойством Services.Метод IComponentModelBuilder.BuildModel теперь принимает ICollection вместо одного типа в качестве сервисов.Метод ComponentRegistration.For (Type serviceType, params Type [] forwaredTypes) был удален.Тип делегата ComponentFilter был удален, поскольку больше не нужен

влияние - низкая исправляемость - легко

описание - В рамках улучшения внутренней архитектуры изменилось то, как обрабатываются компоненты, представляющие более одной службы.

fix - это изменение не должно повлиять на большинство пользователей, если не расширять внутреннюю часть контейнера.Если это так, настройте ваши вызовы на новые подписи и измените код, ожидающий, что ForwardedHandlers будет использовать коллекцию служб из решения IHnadler для любого заданного компонента ==========================================================================

Я думаю, что это в значительной степени отвечает на мой вопрос.

Или это не так: Какая реальная реализация?Получение Сервиса Название алога с его типом?и сделайте проверку по "handler.ComponentModel.Implementation.FullName" для ключа по умолчанию.

или просто передайте их как есть?

Спасибо

Ответы [ 2 ]

1 голос
/ 22 июня 2012

Похоже, что это ошибка, о которой было сообщено 29 декабря 2011 года. Вот билет ... http://docs.castleproject.org/Windsor.Windsor-tutorial-part-three-a-testing-your-first-installer.ashx?HL=service,componentmodel&Discuss=1#MSG_20111228123958

Как и вы, мне также интересно, есть ли какие-нибудь новости по этому поводу?

0 голосов
/ 13 февраля 2012

Тип ComponentModel предоставляет как свойства Service, так и Implementation, последнее означает реализацию первого.Можете ли вы использовать их для регистрации своих деталей Виндзор?

...