在解析不同的模块时,Unity无法解析类型

时间:2011-10-22 00:31:26

标签: c# unity-container wcf-client channelfactory duplex-channel

我目前正在使用Unity容器和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")

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您没有显示如何(或是否)跨模块共享统一容器。根据您的变量名称(“unityContainer”),我猜它是模块中的局部变量?这意味着您有两个单独的容器实例,每个实例都需要注册。

答案 1 :(得分:0)

事实证明问题是模块初始化的顺序。第一个模块被调用,因此Unity使用最多参数的CTor,DuplexChannelFactory最多有3个和多个模块。谢谢,Juergen