2010-04-29 33 views
9

我剛剛在這個偶然假設它是IDictionary<string, int>在Unity容器無法解析字典

_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的多個構造函數。無法消除歧義。


在異常時,該容器是:

解決System.Collections.Generic.Dictionary 2[System.String,System.Int32],(none) (mapped from System.Collections.Generic.IDictionary 2 [System.String,System.Int32],(無)) --- > System.InvalidOperationException:類型字典`2有多個構造函數的長度爲2.無法消除歧義..

因此,它看起來像它已找到要解析的類型(正在Dictionary<string, int>),但未能新增它...

團結如何解決這種問題?如果鍵入

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

的作品......

什麼想法?

謝謝!

回答

9

非常有趣的發現+1。好像在Unity的錯誤,在這裏看到:

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

你也可以試試這個:

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

這使得它使用默認的構造函數,從而繞過這個問題...

+0

謝謝你的線程和建議 - 我想我需要爲字典編寫一個非通用的包裝,這只是另一個級別的複雜性,我可以沒有:( - 再次感謝 – kiwipom 2010-04-29 01:32:02

+0

誠摯的歉意,延遲接受這一個...我已經o了只是剛剛趕上了你對InjectionConstructor的建議,這確實繞過了這個問題......現在標記爲接受 - 謝謝:) – kiwipom 2010-06-11 10:30:01