我正在嘗試構建基本的依賴注入容器,以便更好地瞭解它們的工作原理。我的容器的一個部分是將別名映射到類名。然後可以遞歸地映射這個類來產生分層列表。它還必須處理它映射到自身的情況。返回根目錄和最高級別父級的分層列表
例如說我有以下映射:
var map = new List<Map>() {
{ new Map("Foo", "Foo") },
{ new Map("foo", "Foo") }
};
其中地圖是:
public class Map {
public string Name { get; set; }
public string Class { get; set; }
public Map(string name, string @class) {
Name = name;
Class = @class;
}
}
我想寫一個方法(GetMap操作),這將返回根(名稱)和給定名稱的最高級別父級(類)。例如我說:
var map = GetMap(map, "Foo");
var map2 = GetMap(map, "foo");
這兩個變量都會返回一個名爲「foo」和類「Foo」的新Map。這是另一個進一步解釋的例子。鑑於以下地圖:
var map = new List<Map>() {
{ new Map("Foo", "FooExtended") },
{ new Map("foo", "Foo") }
};
它會產生一個名爲「foo」和類「FooExtended」的新的Map。
這是我第一次嘗試:
private Map GetMap(List<Map> map, string @class, string name = null) {
var item = map.SingleOrDefault(m => m.Name == @class);
if (item != null && @class != item.Class) {
return GetMap(map, item.Class, @class);
} else {
return new Map(name ?? @class, @class);
}
}
這正確返回與這兩個例子正確的類的地圖。但是,對於這兩個示例,返回的名稱都是「Foo」。這應該是「foo」,因爲它是層次結構的根源。
我希望我解釋得很好。如果有人能告訴我我做錯了什麼,我會很感激。由於
這對你有幫助嗎? – Carson