Пример #1
0
 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;
 }
Пример #2
0
        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;
        }
Пример #3
0
        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;
        }