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)
这样可行...
有任何想法吗?
谢谢!
很有意思找到+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)
这使得它使用默认构造函数,从而避免了问题......
| 归档时间: |
|
| 查看次数: |
5912 次 |
| 最近记录: |