Я пытаюсь создать базовый контейнер для инъекций зависимостей, чтобы лучше понять, как они работают. Одна из частей моего контейнера сопоставляет псевдоним имени класса. Затем этот класс можно отобразить рекурсивно для создания иерархического списка. Он также должен обрабатывать случаи, когда он сопоставляется с самим собой.Иерархический список для возврата Корневой уровень и старший уровень
Например у меня есть следующее отображение:
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». Вот еще один пример для дальнейшего объяснения. На следующей карте:
var map = new List<Map>() {
{ new Map("Foo", "FooExtended") },
{ new Map("foo", "Foo") }
};
Это создаст новую карту с именем «foo» и классом «FooExtended».
Вот моя первая попытка:
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