Unity Dependency Injection службы WCF через web.config - PullRequest
3 голосов
/ 14 января 2010

У меня есть проект, в котором я экспериментирую с DI. Я использую Unity, и кажется, что все работает хорошо для обычных сборок и инъекций.

Я пытаюсь еще больше разорвать зависимости с помощью служб WCF. Служба WCF, которую я хочу внедрить, в настоящее время создается во время выполнения без использования DI, и я не использую прокси-серверы, сгенерированные VS .net:

MyService = new ChannelFactory<IMyService>("BasicHttpBinding_IMyService").CreateChannel();

Конечная точка для вышеупомянутого находится в web.config:

<endpoint address="http://localhost:35806/MyService.svc"
       binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMyService"
       contract="Interfaces.IMyService" name="BasicHttpBinding_IMyService" />

Я пытаюсь выяснить, как сопоставить эту службу WCF с интерфейсом через web.config, чтобы я мог использовать инжектор конструктора

В web.config нормальное отображение происходит с использованием «mapTo», где вы должны указать псевдоним интерфейса и псевдоним для класса, который вы ранее определили.

<type type="IMyService" mapTo="MyService">
 <lifetime type="singleton"/>
</type>

Поскольку прокси службы WCF создается динамически во время выполнения, у меня нет этой ссылки на класс «MyService», вместо этого ему необходимо получить конечную точку "BasicHttpBinding_IMyService" для службы.

Любые идеи о том, как это можно сделать?

Ответы [ 2 ]

2 голосов
/ 14 января 2010

Единственный способ увидеть эту работу из файла конфигурации - это создать класс MyService, который реализует IMyService - и за кулисами он создает свой собственный канал (с использованием фрагмента кода ChannelFactory) и, по сути, действует как прокси.

Но вместо этого, почему бы просто не позвонить

RegisterInstance<IMyService>(myServiceChannelInstance)

на вашем контейнере Unity и передать уже созданный экземпляр канала MyService?

1 голос
/ 30 мая 2011

В прошлом году я написал набор расширений Unity, которые достигли именно этого.Вы можете скачать мой инструментарий с http://neovolve.codeplex.com/releases/view/19004, который имеет эту поддержку.

Посмотрите файл chm для инструментария.В документации для Neovolve.Toolkit.Unity.ProxyParameterValueElement будет описано, как добиться того, чего вы хотите, с помощью этого инструментария.

...