代码之家  ›  专栏  ›  技术社区  ›  kiwipom

无法解析Unity容器中的字典

  •  10
  • kiwipom  · 技术社区  · 15 年前

    我刚刚偶然发现:

    在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=“(none)”。

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


    发生异常时,容器为:

    正在解析System.Collections.Generic.Dictionary 2[System.String,System.Int32],(none) (mapped from System.Collections.Generic.IDictionary ---&燃气轮机;System.InvalidOperationException:类型字典`2有多个长度为2的构造函数。无法消除歧义。。

    Dictionary<string, int> )但没能重新开始。。。

    为什么unity不能解决这类问题?如果我打字

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

    这很有效。。。

    有什么想法吗?

    1 回复  |  直到 15 年前
        1
  •  9
  •   BFree    15 年前

    非常有趣的发现+1。似乎是Unity中的一个bug,请看这里:

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

    您也可以尝试以下方法:

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

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