我偶然发现了这个:
在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>()
有效......
任何想法?
谢谢!
答案 0 :(得分:9)
很有意思找到+1。看起来像是Unity中的一个错误,请看这里:
http://unity.codeplex.com/Thread/View.aspx?ThreadId=30292
你也可以试试这个:
container.RegisterType<IDictionary<int, string>, Dictionary<int, string>>
(new InjectionConstructor());
这使得它使用默认构造函数,从而避免了问题......