Unity Dependency Injection для сервисов WCF - PullRequest
13 голосов
/ 22 сентября 2010

Может кто-нибудь направить меня к хорошему примеру Unity Dependency Injection для служб WCF? Любой блог или MSDN статья также поможет.

Ответы [ 3 ]

5 голосов
/ 22 сентября 2010

В этом ответе приведен пример того, как включить DI в WCF с помощью Castle Windsor.

Просто замените IWindsorContainer на IUnityContainer в этом примере, и вы должны быть полностью настроены, хотя выможет также захотеть изменить имена классов с WindsorXyz на UnityXyz:)

5 голосов
/ 22 сентября 2010

Чтобы внедрить зависимости в сервисы WCF, мне пришлось реализовать фабрику хостов сервисов.

Я нашел пошаговое руководство здесь .

В основном вам необходимо:

  1. Реализация IInstanceProvider для создания сервисовиспользование контейнера
  2. Реализация IServiceBehavior для установки поставщика экземпляра в диспетчере конечных точек
  3. Расширение ServiceHost для добавления нового поведения службы
  4. Расширение ServiceHostFactory для создания нового хоста службы
2 голосов
/ 19 июля 2016

Я собираюсь попробовать библиотеку Unity.Wcf (https://github.com/ViceIce/unity.wcf), на первый взгляд выглядит неплохо. Я прочитал в эту статью это:

Если вы размещаете свою службу WCF в службе Windows с помощью ServiceHost, замените экземпляр ServiceHost на пользовательский Unity.Wcf.UnityServiceHost. Вы обнаружите, что UnityServiceHost принимает контейнер Unity в качестве первого параметра, но в противном случаеидентичен стандартному ServiceHost.

Поскольку это мой случай, я собираюсь сделать это ...

   class Program
{
    static void Main(string[] args)
    {
        // 1st Initialize the Host (Configures Container and Factories)
        ServiceHostController.Initialize();

        // 2nd Create a URI to serve as the base address.
        var baseAddress = new Uri("http://localhost:54321/BlaBlaBla/");

        // 3rd Create a UnityServiceHost instance
        var myService = new UnityServiceHost(ServiceHostController.UnityContainer, typeof(MyService), baseAddress);

        try
        {  //etcetera...

И это сработало для меня, мне все еще нужно провести рефакторингнекоторые вещи и добавить функции и методы, но отправная точка работает как очарование.

Я надеюсь, что это помогает.

...