Внедрение зависимостей Unity для служб WCF

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


person SVI    schedule 21.09.2010    source источник


Ответы (3)


В этом ответе приведен пример включения DI в WCF. с Замком Виндзор.

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

person Mark Seemann    schedule 22.09.2010

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

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

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

  1. Реализуйте IInstanceProvider для создания сервисов с использованием контейнера.
  2. Реализуйте IServiceBehavior, чтобы установить поставщик экземпляра в диспетчере конечных точек.
  3. Расширьте ServiceHost, чтобы добавить новое поведение службы
  4. Расширьте ServiceHostFactory, чтобы создать новый узел службы
person onof    schedule 21.09.2010
comment
Это лучший? Я уже смотрел на это, и это выглядит сложно. Что-нибудь попроще ?? - person SVI; 22.09.2010
comment
Теперь это мертвая ссылка. - person Brian Gideon; 19.04.2015

Я собираюсь попробовать библиотеку 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...

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

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

person Juan    schedule 19.07.2016