Example #1
0
        public IDataType GetType(string typeName)
        {
            Type foundType = null;

            if (typeName.EndsWith("]]"))
            {
                var regex   = new Regex(@"^(?<collectionType>.+?)\[\[(?<paramterTypes>.+?)\]\]$");
                var matches = regex.Matches(typeName);

                if (matches.Count == 1)
                {
                    var parameters    = matches[0].Groups["paramterTypes"].Value;
                    var valueTypeName = matches[0].Groups["collectionType"].Value;

                    var valueType = typeFinder.GetType(valueTypeName);

                    if (valueType != null)
                    {
                        var paramterTypes = GetParamterTypes(parameters);
                        foundType = valueType.GetTargetType().MakeGenericType(paramterTypes);
                    }

                    if (foundType != null)
                    {
                        typesCache.Add(typeName, foundType);
                    }
                }
            }

            return(foundType == null ? null : dataTypeFactory.Create(foundType));
        }
        public object Get(INXmlElementReader nodeReader)
        {
            object objectInstance;

            using (var itemNodesReader = nodeReader.GetNextChildNode("items"))
            {
                var innerText = itemNodesReader.GetPayload().Trim('\r', '\n', ',', '\t').Replace("\r\n", string.Empty);
                var values    = innerText.Split(',');

                var valuesList = new ArrayList();
                foreach (var valueText in values)
                {
                    valuesList.Add(double.Parse(valueText));
                }

                var typeName   = nodeReader.Attributes.Get("type");
                var objectType = typeFinder.GetType(typeName);

                objectInstance = valuesList.ToArray(objectType.GetElementType().GetTargetType());

                readObjects.Add(nodeReader.Attributes.GetInteger("ID"), objectInstance);
            }

            return(objectInstance);
        }
Example #3
0
        public object Get(INXmlElementReader nodeReader)
        {
            var typeName = nodeReader.Attributes.Get("type");
            var type     = typeFinder.GetType(typeName);

            return(Enum.Parse(type.GetTargetType(), nodeReader.GetPayload().Trim()));
        }
Example #4
0
        public object Get(INXmlElementReader nodeReader)
        {
            var valuesList = new ArrayList();

            using (var itemNodes = nodeReader.GetNextChildNode("items"))
            {
                INXmlElementReader itemNode;
                while ((itemNode = itemNodes.GetNextChildNode()) != null)
                {
                    if (objectReader.CanRead(itemNode))
                    {
                        valuesList.Add(objectReader.Get(itemNode));
                    }

                    itemNode.Dispose();
                }
            }

            var elementType    = typeFinder.GetType(nodeReader.Attributes.Get("type")).GetElementType();
            var objectInstance = valuesList.ToArray(elementType.GetTargetType());

            readObjects.Add(nodeReader.Attributes.GetInteger("ID"), objectInstance);

            return(objectInstance);
        }
Example #5
0
        public bool Authorize(string area, string controllerName, string actionName, string roleString)
        {
            //调试模式不验证权限
            if (_webConfig.Debug)
            {
                return(true);
            }

            var routeData = new Dictionary <string, object>
            {
                { "area", area },
                { "controller", controllerName },
                { "action", actionName }
            };

            var virtualPathData = RouteTable.Routes.GetVirtualPathForArea(_httpContextBase.Request.RequestContext, new RouteValueDictionary(routeData));
            // ASP.NET MVC5 :System.Web.Mvc.Routing.RouteDataTokenKeys const Namespaces = "Namespaces"
            // ASP.NET MVC Source Code: https://github.com/aspnet/AspNetWebStack
            var controllerNamespaces = virtualPathData.DataTokens["Namespaces"] as string[];

            if (controllerNamespaces == null || controllerNamespaces.Length == 0)
            {
                throw new Exception("未找到对应路由绑定的控制器命名空间");
            }

            Type controllerType = null;

            for (int i = 0; i < controllerNamespaces.Length; i++)
            {
                var controllerClassName = string.Format($"{controllerNamespaces[i]}.{controllerName}Controller");
                controllerType = _typeFinder.GetType(controllerClassName);

                if (controllerType == null && i == controllerNamespaces.Length - 1)
                {
                    throw new Exception($"没有找到控制器类型,检索的控制器类型完全名称为{controllerClassName}");
                }
            }

            var action = controllerType.GetMethods().FirstOrDefault(p =>
                                                                    (p.Name == actionName && p.GetCustomAttribute <ActionNameAttribute>(true) == null) ||
                                                                    p.GetCustomAttribute <ActionNameAttribute>(true).Name == actionName);

            if (action == null)
            {
                return(true);
            }

            var roleAttribute = action.GetCustomAttribute <RoleAuthorizeAttribute>();

            if (roleAttribute == null)
            {
                return(true);
            }

            var roles = JsonConvert.DeserializeObject <List <RoleItem> >(roleString);

            return(roles.Any(p => p.Controller == controllerName && p.AuthorizeActions.Contains(actionName)));
        }
Example #6
0
        public IDataType GetType(string typeName)
        {
            var typeDefinition = migrationDefinition.GetTypeDefinition(typeName);

            if (typeDefinition != null)
            {
                typeName = typeDefinition.GetTypeName();
            }
            return(typeFinder.GetType(typeName));
        }
Example #7
0
        public object Get(INXmlElementReader nodeReader)
        {
            var typeName = nodeReader.Attributes.Get("type");
            var type     = typeFinder.GetType(typeName);

            var instance = appObjectRepository.Get(type.GetTargetType());

            readObjects.Add(nodeReader.Attributes.GetInteger("ID"), instance);

            return(instance);
        }
        public IDataType GetType(string typeName)
        {
            while (typeName[0] == '!')
            {
                var regex     = new Regex(@"^!(?<id>\d+)(?<remainder>.*)$", RegexOptions.IgnorePatternWhitespace);
                var matches   = regex.Matches(typeName);
                var id        = matches[0].Groups["id"].Value;
                var remainder = matches[0].Groups["remainder"].Value;
                var typeIndex = int.Parse(id);
                typeName = names[typeIndex] + remainder;
            }

            var isArray = typeName.EndsWith("[]");

            if (isArray)
            {
                return(typeFinder.GetType(typeName.Substring(0, typeName.Length - "[]".Length)).MakeArrayType());
            }
            return(typeFinder.GetType(typeName));
        }
Example #9
0
            /// <summary>
            ///     Gets the binding.
            /// </summary>
            public static Binding ConvertToBinding(this string bindingExpressionAsText, ITypeFinder typeFinder)
            {
                var binding = new Binding
                {
                    Mode = BindingMode.TwoWay
                };
                var list = bindingExpressionAsText.Split('{', '}', '=', ',', ' ').Where(x => !string.IsNullOrWhiteSpace(x)).Select(x => x.Trim()).ToList();

                var pathIndex = list.FindIndex(x => x.Contains("Binding")) + 1;

                if (list[pathIndex] == "Path")
                {
                    pathIndex += 1;
                }

                binding.Path = new PropertyPath(list[pathIndex]);

                var modeIndex = list.FindIndex(x => x == "Mode");

                if (modeIndex > 0)
                {
                    var mode = BindingMode.Default;

                    var isParsed = Enum.TryParse(list[modeIndex + 1], true, out mode);
                    if (!isParsed)
                    {
                        throw Errors.ParsingError(list[modeIndex + 1]);
                    }
                    binding.Mode = mode;
                }

                var converterIndex = list.FindIndex(x => x == "Converter");

                if (converterIndex > 0)
                {
                    var converterTypeName = list[converterIndex + 1];
                    var converterType     = typeFinder.GetType(converterTypeName);
                    binding.Converter = (IValueConverter)Activator.CreateInstance(converterType);
                }

                var updateSourceTriggerIndex = list.FindIndex(x => x == "UpdateSourceTrigger");

                if (updateSourceTriggerIndex > 0)
                {
                    var updateSourceTriggerValue = list[updateSourceTriggerIndex + 1];

                    binding.UpdateSourceTrigger = (UpdateSourceTrigger)Enum.Parse(typeof(UpdateSourceTrigger), updateSourceTriggerValue, true);
                }

                return(binding);
            }
Example #10
0
        public object Get(INXmlElementReader nodeReader)
        {
            var typeName = nodeReader.Attributes.Get("type");
            var type     = typeFinder.GetType(typeName);

            var typeAccessor = new TypeAccessor(type.GetTargetType(), docObjectRepository);
            var instance     = typeAccessor.GetInstance();

            readObjects.Add(nodeReader.Attributes.GetInteger("ID"), instance);

            ReadMembers(instance, nodeReader, type);

            return(instance);
        }
Example #11
0
            /// <summary>
            ///     Searches the dependency property in view.
            /// </summary>
            public static DependencyProperty SearchDependencyProperty(string dpFullName, ITypeFinder typeFinder)
            {
                var lastDotIndex = dpFullName.LastIndexOf('.');
                var propertyName = dpFullName.Substring(lastDotIndex + 1);

                var fieldInfo = typeFinder.GetType(dpFullName.Substring(0, lastDotIndex))
                                .GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.FlattenHierarchy)
                                .FirstOrDefault(p => p.FieldType == typeof(DependencyProperty) &&
                                                p.Name == propertyName);

                if (fieldInfo == null)
                {
                    return(null);
                }

                return((DependencyProperty)fieldInfo.GetValue(null));
            }
Example #12
0
        public object Get(INXmlElementReader nodeReader)
        {
            var typeName = nodeReader.Attributes.Get("type");
            var type     = typeFinder.GetType(typeName);
            var instance = Activator.CreateInstance(type.GetTargetType());

            using (var membersNodeReader = nodeReader.GetNextChildNode("members"))
            {
                if (membersNodeReader == null)
                {
                    throw new NXmlReaderFormatException("Missing class members node.");
                }

                ReadFields(instance, membersNodeReader, type);
            }

            return(instance);
        }
Example #13
0
 public IDataType GetType(string typeName)
 {
     return(typeFinder.GetType(typeName));
 }
 public void ResolveTypeFinder()
 {
     Assert.Equal(typeof(WebAppTypeFinder), _typeFinder.GetType());
 }