Как внедрить объект в сервис WCF - PullRequest
2 голосов
/ 19 мая 2009

Если у меня есть определение / реализация сервиса, как это:

using System;
using System.ServiceModel;

namespace aspace.service
{
  [ServiceContract(Namespace = "http://aspace.service")]
  public interface IUpdate
  {
    [OperationContract]
    ConfirmationMessage UpdatePerson(string PersonIdentifier);
  }
}

public class UpdateService : IUpdate
{
    public ConfirmationMessage UpdatePerson(string PersonIdentifier)
    {
        // some implementation here
    }
}

Я могу создать сервис-хост, как это:

ServiceHost host = new ServiceHost(typeof(UpdateService), someEndpointAddress);

Затем, после создания привязки и добавления метаданных, я могу открыть хост. Который, по запросу от клиента, вызовет UpdatePerson (aPersonIdentifier).

Я бы хотел поговорить с базой данных от UpdatePerson. Ответы на мой предыдущий вопрос предполагают, что я должен использовать внедрение зависимостей для такого рода вещей.

Проблема в том, что я никогда не создаю экземпляр класса UpdateService. Итак, как я могу ввести зависимость? Как бы вы решили это?

Спасибо, привет, Миэль.

Ответы [ 3 ]

2 голосов
/ 19 мая 2009

По сути, вам нужно реализовать IInstanceProvider на основе вашего контейнера IOC и IServiceBehaviour, который использует поставщика экземпляра, который вы написали. Это позволит контейнеру IOC создать иерархию объектов для вас.

Пример реализации здесь

2 голосов
/ 19 мая 2009

Посмотрите на интерфейс IInstanceProvider . По сути, вам нужно реализовать этот интерфейс и в методе GetInstance создать экземпляр класса WCF самостоятельно, предоставив любые зависимости.

0 голосов
/ 19 мая 2009

Если вы планируете внедрить свои зависимости, вам определенно следует рассмотреть возможность использования контейнера IoC. Например. Windsor.

Если вы используете Windsor, существует средство интеграции WCF, которое автоматически внедряет все зависимости в ваш сервис. Проверьте это здесь .

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