我目前正在使用统一容器和 WCF 服务开发 PRISM 应用程序。在模块中(使用 WCF 代理),我为 WCF 客户端注册了一个 ChannelFactory,如下所示:
InstanceContext instanceContext = new InstanceContext(new TradingPlatformCallback());
unityContainer.RegisterType<DuplexChannelFactory<IGenericTradingInterface>, DuplexChannelFactory<IGenericTradingInterface>>(
new ContainerControlledLifetimeManager(),
new InjectionConstructor(
instanceContext,
"NetNamedPipeBinding_IGenericTradingInterface"));
DuplexChannelFactory<IGenericTradingInterface> factory = unityContainer.Resolve<DuplexChannelFactory<IGenericTradingInterface>>();
factory.Open();
IGenericTradingInterface test = factory.CreateChannel();
test.GetServerInformation();
factory.Close();
现在,一切正常,所以我决定在另一个模块中使用这个 ChannelFactory。这是模块的 Initialize 方法:
var test = unityContainer.Resolve<DuplexChannelFactory<IGenericTradingInterface>>();
test.Open();
var test2 = test.CreateChannel();
test2.GetServerInformation();
test.Close();
所以这个代码和其他模块的代码完全一样,只是缺少注册。
运行此程序时,出现以下异常:
Exception is: InvalidOperationException - The type DuplexChannelFactory`1 has mu
ltiple constructors of length 3. Unable to disambiguate.
这似乎是 ChannelFactory 的解析和 Ctors 的问题,但是为什么统一可以在第一个模块中解析工厂而不是在这个模块中呢?
我也不明白这个异常消息,因为我认为在注册中调用了一个特定的 Ctor:
new InjectionConstructor(
instanceContext,
"NetNamedPipeBinding_IGenericTradingInterface")
有任何想法吗?