// i should make it clan for DRY // TODO :Ferhat bunu ben ekledim gerek de olmayabilir. public static MethodMap CreateMethodMap(this object [] instances) { var map = new MethodMap(); foreach (var method in instances.SelectMany(t=>t.GetType().GetMethods())) { var paths = PathAttribute.PathsForMethod(method); if (paths.Length == 0) continue; var verbs = VerbAttribute.VerbsForMethod(method); foreach (var path in paths) foreach (var verb in verbs) map.MapMethod(path, verb, method); } return map; }
public static MethodMap CreateMethodMap(this IEnumerable<Type> types) { var map = new MethodMap(); foreach (var method in types.SelectMany(t => t.GetMethods())) { var paths = PathAttribute.PathsForMethod(method); if (paths.Length == 0) continue; var verbs = VerbAttribute.VerbsForMethod(method); if (verbs.Length == 0) verbs = new string[] { "GET" }; foreach (var path in paths) foreach (var verb in verbs) map.MapMethod(path, verb, method); } return map; }
void MapMethod(IEnumerable<string> pathComponents, string verb, MethodInfo method) { string component = pathComponents.FirstOrDefault(); if (component == null) methods[verb] = method; else { if (!children.ContainsKey(component)) children[component] = new MethodMap(component); children[component].MapMethod(pathComponents.Skip(1), verb, method); } }