Внедрение зависимости wcf

Я хочу, вводят реализацию моего Интерфейса в WCF, но я хочу, инициализируют мой контейнер Внедрения зависимости в Клиенте WCF. Таким образом, у меня может быть другая реализация для каждого клиента моего сервиса.

6
задан Ruben Bartelink 17 August 2011 в 07:26
поделиться

1 ответ

Когда вы используете svcutil.exe или мастер Добавить ссылку на службу в Visual Studio, одним из многих автоматически сгенерированных типов будет клиентский интерфейс. Назовем его IMyService . Также будет другой автоматически сгенерированный интерфейс, называемый чем-то вроде IMyServiceChannel , который реализует IMyService и IDisposable. Используйте эту абстракцию в остальной части вашего клиентского приложения.

Поскольку вы хотите иметь возможность создать новый канал и снова закрыть его, вы можете ввести Абстрактную фабрику:

public interface IMyServiceFactory
{
    IMyServiceChannel CreateChannel();
}

В остальной части вашего клиентского приложения вы можете использовать зависимость от IMyServiceFactory:

public class MyClient
{
    private readonly IMyServiceFactory factory;

    public MyClient(IMyServiceFactory factory)
    {
        if (factory == null)
        {
            throw new ArgumentNullException("factory");
        }

        this.factory = factory;
    }

    // Use the WCF proxy
    public string Foo(string bar)
    {
        using(var proxy = this.factory.CreateChannel())
        {
            return proxy.Foo(bar);
        }
    }
}

Вы можете создать конкретную реализацию IMyServiceFactory, которая обертывает WCF ChannelFactory в качестве реализации:

public MyServiceFactory : IMyServiceFactory
{
    public IMServiceChannel CreateChannel()
    {
        return new ChannelFactory<IMyServiceChannel>().CreateChannel();
    }
}

Теперь вы можете настроить свой контейнер DI, сопоставив IMyServiceFactory с MyServiceFactory. Вот как это делается в Castle Windsor:

container.Register(Component
    .For<IMyServiceFactory>()
    .ImplementedBy<MyServiceFactory>());

Дополнительная информация: Вот , как подключить службу WCF к контейнеру DI .

17
ответ дан 8 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: