В настоящее время я работаю над приложением PRISM с контейнером Unity и службой WCF.
В модуле (с прокси WCF) я регистрирую ChannelFactory для клиента WCF следующим образом:
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.
Кажется, это проблема с разрешением и Ctors ChannelFactory, но почему единство может разрешить фабрику в первом модуле, а не в этом?
Я также не понимаю это сообщение об исключении, так как я думал, что вызвал определенный Ctor при регистрации:
new InjectionConstructor(
instanceContext,
"NetNamedPipeBinding_IGenericTradingInterface")
Есть идеи?