Зарегистрируйте несколько конечных точек одного контракта в WCF и Castle windsor - PullRequest
0 голосов
/ 18 февраля 2020

Мне нужна помощь по внедрению внедрения WCF Castle в одном из моих проектов.

По сути, мы разрабатываем инструмент конфигурации, который синхронизировал бы данные между нашей тестовой и производственной средами. Он считывает данные из производственной среды и обновляет данные в тестовых средах, так что тестовая и производственная среды синхронизируются c для регрессионного тестирования наших приложений

Итак, в моем файле конфигурации приложения я Я поддерживаю разные конечные точки моего сервиса (они имеют разные имена, но имеют одинаковый контракт). Я регистрирую их следующим образом

container.Register(Component.For<IService>().ImplementedBy<CustomServiceProxy>().Named(integration));
container.Register(Component.For<IService>().ImplementedBy<CustomServiceProxy>().Named(useracceptance));

Класс "CustomServiceProxy" имеет бизнес-логи c и выполняет сравнение данных для синхронизации.

В приведенном выше коде, когда компоненты Регистрируясь, я сталкиваюсь с нижеуказанным исключением. Я проверил конечные точки, упомянутые в файле конфигурации, и всем конечным точкам присвоены разные имена, чтобы они не конфликтовали друг с другом во время выполнения

Раздел конфигурации конечных точек для контракта 'DataSynch.IService 'не может быть загружен, потому что найдено более одной конфигурации конечной точки для этого контракта. Пожалуйста, укажите предпочтительный раздел конфигурации конечной точки по имени

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

container.Register(Component.For<IServiceFactory<IService>>().ImplementedBy<ServiceFactory>().
                        ServiceOverrides(
                            ServiceOverride.ForKey(IntService).Eq(integration),
                            ServiceOverride.ForKey(UatService).Eq(useracceptance)));     

Те же ключи, упомянутые в переопределении службы, передаются в параметры конструктора для разрешения зависимостей

Любая быстрая справка по этой теме c была бы действительно полезной

1 Ответ

0 голосов
/ 05 апреля 2020

Я нашел способ решения этой проблемы с помощью перехватчиков Castle Windsor.

Мы регистрируем перехватчики для зависимостей, и когда зависимости разрешаются во время выполнения, Castle заботится о добавлении пользовательских логов c введен как часть перехватчиков.

Ссылка на учебник: https://lukemerrett.com/aop-in-castle-windsor/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...