Я работал с 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" для ключа по умолчанию.
или просто передайте их как есть?
Спасибо