我有一個函數,MyFunc
,接收的IDoer
配置IoC容器。我想通過不同的實現和不同的初始化:如何通過代碼特定任務
var types = new IDoer[]{typeof(Walker),typeof(Runner),typeof(Sweamer)};
var strings = new[]{"abc","xyz","zoo","cat","dog"};
foreach(var type in types) {
foreach(var str in strings) {
IDoer doer = container.ResolveWithParams(type, str, RandomizeInteger());
MyFunc(doer, str);
}
}
甚至更好:
var strings = new[]{"abc","xyz","zoo","cat","dog"};
foreach(var type in types) {
foreach(var str in strings) {
IDoer doer = container.ResolveWithParams<Walker>(type, str, RandomizeInteger());
MyFunc(doer, str);
doer = container.ResolveWithParams<Runner>(type, str, RandomizeInteger());
MyFunc(doer, str);
doer = container.ResolveWithParams<Sweamer>(type, str, RandomizeInteger());
MyFunc(doer, str);
}
}
例如,Walker
的構造是:
public Walker(/*lots of params...*/,
string importantString, /*other params...*/,
int importantInteger,/*even more params...*/) {/*...*/}
Runner
的是:
public Runner(string importantString, /*some params...*/,
int importantInteger,/*additional different set of data...*/) {/*...*/}
和Sweamer
的:
public Sweamer(string importantString, int importantInteger) {/*...*/}
我的問題是如何配置此container
使用代碼(沒有XML)?
我不介意這一種容器 - 這只是我使用IoC容器的第一步,我想一般的學習它是如何正在做。
此URL有幫助嗎? http://msdn.microsoft.com/en-us/library/ff648211.aspx – Egor4eg
詳細的,請看點「5」 Egor4eg的鏈接:'如果你想創建一個以上的註冊或映射爲同一類型,可以通過指定一個名稱作爲參數來創建一個命名(非默認)映射。給每個人一個獨特的名字,然後用這個名字叫出來。 –
@ Egor4eg:我最初以爲 - 是的,但參數是類型。我不想那樣。我希望參數是輸入參數。我寧願將問題轉移到編譯階段... – Tar