Допустим, у меня есть следующий контракт
[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();
Кажется, мне нужен механизм открытых обобщений, или я мог бы сканировать сборку на наличие классов, которые реализуют определенный интерфейс, и для каждого из них выполнить вышеуказанную регистрацию.
Может быть, я ошибаюсь, но я не удовлетворен приведенным выше кодом, который я написал.
У вас есть предложение или намек?
Спасибо!