0

當我試圖傳遞兩個參數是相同類型的,像這樣:在溫莎城堡同類型的解決方案時參數

public IPercentage CreatePercentage(int part, int total) 
{ 
    return _container.Resolve<T>(new Arguments(part, total)); 
} 

一個構造像這樣:

public Percentage(int part, int total) 
{ 
    // ... 
} 

然後我得到一個System.ArgumentException:具有相同密鑰的項目已被添加。

如何傳遞相同類型的參數?

  • 關鍵的是我想避免使用參數的文本字符串名稱來識別哪些參數去哪裏
  • ,而使用的參數
  • ,只是一個事實,即它是順序只適用於構造函數,儘管我猜測溫莎的字典實現不允許這樣做。
+0

這裏有兩種方法可以做到這一點:http://blog.ploeh.dk/2012/07/02/PrimitiveDependencies –

+0

參見http://blog.ploeh.dk/2012/11/07/AppSettingsconventionforCastleWindsor –

+0

@ MarkSeemann謝謝,但哪兩個?我有一個快速瀏覽,我不知道如何將它應用到目前的情況,因爲我談論的是從代碼到注入工廠(使用CreatePercentage方法)在解析時提供的參數,而不是在組合根上提供的參數;我的意思是哪兩個給定需要不使用硬編碼的字符串名稱,因爲它不適用於模糊處理:( – Cel

回答

2

這是絕對可行的,正確的調用according to documentation是:

_container.Resolve<IPercentage>(new Arguments(new { part, total })); 

但首選方法是使用TypedFactoryFacility。除了入口點和/或組合根之外,您不應該從代碼中調用容器。

+0

謝謝,它的確行得通了!雖然'新的參數(部分,總)'不像它使用另一個重載,這是基於字典的我相信 – Cel

+0

經過混淆測試後,結果表明這種方法不起作用 - 它仍然依賴於參數變量名稱,它在混淆時會發生變化...... – Cel