假设我有以下合同
[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 code wiki page阅读了wiki,并且还阅读了this StackOverflow question。看来我需要做的是两种解决方案之间存在的问题,或者我对Autofac的了解还不够。
我得到的是,对于每种类型的消息,我在Autofac中注册了这个:
builder.Register(c => new ChannelFactory<ISomethingService<SomeMessageType>>(new NetTcpBinding(), new EndpointAddress("address")));
builder.Register(c => c.Resolve<ChannelFactory<ISomethingService<SomeMessageType>>>().CreateChannel()).UseWcfSafeRelease();
我似乎需要一个开放的泛型机制,或者我可以扫描程序集以查找实现特定接口的类,并为每个接口执行上述注册。
也许我错了,但我对上面编写的代码不满意。 你有什么建议或暗示吗? 谢谢!