예제 #1
0
        public IEnumerable <string> GetListTree(string path)
        {
            ICollection <string> ret = new List <string>();

            IList <string> pathList = path.Split('/').Where(x => !string.IsNullOrEmpty(x)).ToList();

            AssemblyTreeItem item = null;
            Dictionary <string, InvertedSearcher <string, AssemblyTreeItem> > treeItem = null;

            if (tree.Get(pathList, out item, out treeItem))
            {
                if (null != treeItem)
                {
                    foreach (string name in treeItem.Keys)
                    {
                        ret.Add(name);
                    }
                }
                else if (null != item)
                {
                    foreach (MethodInfo miItem in item.methodList)
                    {
                        ret.Add(miItem.ToString());
                    }
                }
            }

            return(ret);
        }
예제 #2
0
        /// <summary>
        /// Загрузка сборки в дерево
        /// </summary>
        /// <param name="assemblyPath">Полный путь к сборке</param>
        /// <param name="methodsMap">JSON содержащий карту загружаемых типов</param>
        public void LoadAssembly(string assemblyPath, string methodsMap)
        {
            Type objType = typeof(Object);
            IEnumerable <string> baseMethods = from item in objType.GetMethods(BindingFlags.Public | BindingFlags.Instance)
                                               select item.Name;

            Assembly assembly = Assembly.LoadFile(assemblyPath);

            IEnumerable <Type> typesList = null;

            if (string.IsNullOrEmpty(methodsMap))
            {
                typesList = from item in assembly.GetTypes()
                            where item.IsVisible
                            select item;
            }
            else
            {
                //TODO: сделать загрузку типов по карте
            }


            foreach (Type typeItem in typesList)
            {
                IList <string> partsName = typeItem.FullName.Split('.').ToList();

                IEnumerable <MethodInfo> methodInfos = from item in typeItem.GetMethods(BindingFlags.Public | BindingFlags.Instance)
                                                       where !baseMethods.Contains(item.Name)
                                                       select item;

                object obj = Activator.CreateInstance(typeItem);

                foreach (MethodInfo miItem in methodInfos)
                {
                    partsName.Add(miItem.Name);

                    AssemblyTreeItem item = null;
                    if (tree.Get(partsName, out item))
                    {
                        bool rez = item.Set(obj, miItem);
                    }
                    else
                    {
                        item = new AssemblyTreeItem();
                        item.Set(obj, miItem);
                        bool rez = tree.Set(partsName, item);

                        if (!rez)
                        {
                            throw new Exception("Метод класса не добавлен");
                        }
                    }

                    partsName.Remove(partsName.Last());
                }
            }
        }
예제 #3
0
        /// <summary>
        /// Выполнить метод содержащийся в дереве
        /// Будет выполненн первый метод подходящий по имени и параметрам
        /// </summary>
        /// <param name="command">
        /// Метод и значения его параметров
        /// Пример: GenerateRealty("http://beta.api.gorod55.ru/realty", "C:\\yandex.realty.gz")
        /// </param>
        /// <returns>Результат выполнения метода</returns>
        public object Execute(string command)
        {
            object ret        = null;
            string methodName = string.Empty;

            object[] par = null;

            GetMethAndPar(command, ref methodName, out par);

            if (!string.IsNullOrEmpty(methodName))
            {
                AssemblyTreeItem item = null;
                if (tree.FindFirst(methodName, out item))
                {
                    ret = item.Execute(par);
                }
            }

            return(ret);
        }