Регистрация клиента WCF для общего клиента - PullRequest
0 голосов
/ 04 ноября 2011

Допустим, у меня есть следующий контракт

[ServiceContract]
public interface ISomethingService<T>
{
    [OperationContract(IsOneWay = true)]
    void DoSomething(string messageType, T message);
}

И я хочу использовать Autofac для создания клиента. Так что вместо

var address = new EndpointAddress(SOME_ADDRESS);
ChannelFactory<ISomethingService<T>> factory = null;
factory = new ChannelFactory<ISomethingService<T>>(new NetTcpBinding());

IPublisherService<T> proxy = factory.CreateChannel(address);
proxy.DoSomething(typeof(T).FullName, message);

Я мог бы использовать Autofac. Я прочитал вики на странице вики-кода Google , а также прочитал этот вопрос StackOverflow . Похоже, мне нужно что-то, что лежит между обоими решениями, или я недостаточно читал об Autofac.

Я пришел к выводу, что для каждого типа сообщений, которые я регистрирую в Autofac:

builder.Register(c => new ChannelFactory<ISomethingService<SomeMessageType>>(new NetTcpBinding(), new EndpointAddress("address")));

        builder.Register(c => c.Resolve<ChannelFactory<ISomethingService<SomeMessageType>>>().CreateChannel()).UseWcfSafeRelease();

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

Может быть, я ошибаюсь, но я не удовлетворен приведенным выше кодом, который я написал. У вас есть предложение или намек? Спасибо!

...