无法解析Unity容器中的Dictionary

kiw*_*pom 11 c# ioc-container unity-container

我偶然发现了这个:

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

_unityContainer = new UnityContainer()
    .RegisterType<IDictionary<string, int>, Dictionary<string, int>>();
Run Code Online (Sandbox Code Playgroud)

但如果我试试

var d = _unityContainer.Resolve<IDictionary<string, int>>();
Run Code Online (Sandbox Code Playgroud)

它无法解决......

我明白了......

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

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


在例外时,容器是:

解析System.Collections.Generic.Dictionary 2[System.String,System.Int32],(none) (mapped from System.Collections.Generic.IDictionary2 [System.String,System.Int32],(无))---> System.InvalidOperationException:类型Dictionary`2有多个长度为2的构造函数.无法消除歧义..

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

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

IDictionary<string, int> d = new Dictionary<string, int>()
Run Code Online (Sandbox Code Playgroud)

这样可行...

有任何想法吗?

谢谢!

BFr*_*ree 9

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

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

你也可以试试这个:

 container.RegisterType<IDictionary<int, string>, Dictionary<int, string>>
                (new InjectionConstructor());
Run Code Online (Sandbox Code Playgroud)

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