Инъекция зависимостей Unity для служб WCF

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

Ответ 1

Этот ответ дает пример о том, как включить DI в WCF с Castle Windsor.

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

Ответ 2

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

Я нашел пошаговый учебник здесь.

В основном вы должны:

  • Внедрение IInstanceProvider для создания служб с использованием контейнера
  • Внедрение IServiceBehavior для установки поставщика экземпляра в диспетчере конечных точек
  • Расширьте ServiceHost, чтобы добавить новое поведение службы.
  • Расширение ServiceHostFactory для создания нового хоста службы

Ответ 3

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

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

Надеюсь, это поможет.