private static Dictionary<string, string> GetsynonymsMap(Handler commandDescriptor, MethodInfo method) { var result = new Dictionary<string, string>(); var synonymAttributes = Attribute.GetCustomAttributes(method, typeof (DefineSynonymAttribute)); if (synonymAttributes.Any()) { foreach (var synonymAttribute in synonymAttributes) { var attribute = ((DefineSynonymAttribute) synonymAttribute); result[attribute.ArgumentName] = attribute.Synonyms; } } return result; }
public static IHandler CreateHandler(string name, string[] arguments = null, string[] flags = null) { arguments = arguments ?? new string[0]; flags = flags ?? new string[0]; var handler = new Handler { CommandName = name }; handler.SupportedArguments.AddRange(arguments); foreach (var flag in flags) { handler.Flags.Add(flag); } return handler; }
public List<IHandler> GetHandlers() { IEnumerable<MethodInfo> methodsWithAttr = FindAllMethodsWithCommandAttribute(); var result = new List<IHandler>(); foreach (var method in methodsWithAttr) { var commandDescriptor = new Handler { HandlerMethodInfo = method, CommandName = GetCommandName(method) }; var parameters = method.GetParameters(); var synonymsMap = GetsynonymsMap(commandDescriptor, method); foreach (var parameter in parameters) { if (parameter.ParameterType == typeof(bool)) { // commandDescriptor.SupportedFlags.Add(parameter.Name); string synonyms = null; if (synonymsMap.ContainsKey(parameter.Name)) { synonyms = synonymsMap[parameter.Name]; } commandDescriptor.Flags.Add(parameter.Name, synonyms); } else { commandDescriptor.SupportedArguments.Add(parameter.Name); } } result.Add(commandDescriptor); } return result; }