无法解析Unity容器中的Dictionary

时间:2010-04-29 00:01:06

标签: c# unity-container ioc-container

我偶然发现了这个:

在Unity容器中,我想注册IDictionary<TK, TV>;假设它是IDictionary<string, int>

_unityContainer = new UnityContainer()
    .RegisterType<IDictionary<string, int>, Dictionary<string, int>>();

但如果我尝试

var d = _unityContainer.Resolve<IDictionary<string, int>>();

无法解决......

我明白了......

Microsoft.Practices.Unity.ResolutionFailedException:Microsoft.Practices.Unity.ResolutionFailedException:依赖项的解析失败,type =“System.Collections.Generic.IDictionary`2 [System.String,System.Int32]”,name = “(没有)”。 在解决时发生异常。

异常是:InvalidOperationException - 类型Dictionary`2有多个长度为2的构造函数。无法消除歧义。


在例外时,容器是:

Resolving System.Collections.Generic.Dictionary 2[System.String,System.Int32],(none) (mapped from System.Collections.Generic.IDictionary 2 [System.String,System.Int32],(none))  ---&GT; System.InvalidOperationException:类型Dictionary`2有多个长度为2的构造函数。无法消除歧义..

所以它看起来已找到要解析的类型(Dictionary<string, int>)但未能将其新建......

怎么团结不能解决这种类型?如果我输入

IDictionary<string, int> d = new Dictionary<string, int>()

有效......

任何想法?

谢谢!

1 个答案:

答案 0 :(得分:9)

很有意思找到+1。看起来像是Unity中的一个错误,请看这里:

http://unity.codeplex.com/Thread/View.aspx?ThreadId=30292

你也可以试试这个:

 container.RegisterType<IDictionary<int, string>, Dictionary<int, string>>
                (new InjectionConstructor());

这使得它使用默认构造函数,从而避免了问题......