/// <summary>
        /// Build a reflected class by providing a type
        /// </summary>
        /// <param name="type">Type to reflect</param>
        /// <returns>Reflected Class</returns>
        public IReflectedClass BuildReflectedClass(Type type)
        {
            var reflectedClass = _reflectedClassResolver();

            reflectedClass.Name = type.Name;
            reflectedClass.ReflectedClassOperations = _reflectedClassOperationsResolver();
            reflectedClass.ReflectedClassOperations.GetReflectedType = () => type;
            reflectedClass.ReflectedClassOperations.CreateNewObject  = () => Activator.CreateInstance(type);
            _customAttributeProviderManager.GetAttributes(type).ForEach(a => reflectedClass.Attributes.Add(a));

            _reflectedMethodBuilder.BuildReflectedMethods(reflectedClass, type);
            _reflectedPropertyBuilder.BuildReflectedProperties(reflectedClass, type);

            return(reflectedClass);
        }
Пример #2
0
        /// <summary>
        /// Builds a Reflected Method Class
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public ICollection <IReflectedMethod> BuildReflectedMethods(Type type)
        {
            var reflectedMethods = new List <IReflectedMethod>();

            foreach (var methodInfo in type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
                     .Where(m => !m.IsSpecialName))
            {
                var reflectedMethod = _reflectedMethodFunction();

                reflectedMethod.Name = methodInfo.Name;
                reflectedMethod.ReflectedMethodOperations = _reflectedMethodOperationsResolver();
                reflectedMethod.ReflectedMethodOperations.InvokeFunction = methodInfo.Invoke;
                reflectedMethod.ReflectedMethodOperations.MethodInfo     = methodInfo;

                _customAttributeProviderManager.GetAttributes(methodInfo).ForEach(a => reflectedMethod.Attributes.Add(a));

                reflectedMethods.Add(reflectedMethod);
            }

            return(reflectedMethods);
        }
Пример #3
0
        /// <summary>
        /// Builds a collection of ReflectedProperty classes and adds them to the ReflectedClass.
        /// </summary>
        /// <param name="reflectedClass"></param>
        /// <param name="type"></param>
        public void BuildReflectedProperties(IReflectedClass reflectedClass, Type type)
        {
            foreach (var propertyInfo in type.GetProperties())
            {
                var reflectedProperty = _reflectedPropertyResolver();

                reflectedProperty.Name = propertyInfo.Name;
                _customAttributeProviderManager.GetAttributes(propertyInfo).ForEach(a => reflectedProperty.Attributes.Add(a));
                reflectedProperty.PropertyTypeName = propertyInfo.PropertyType.Name;
                reflectedProperty.IsSimple         = _propertyTypeManager.IsSimple(propertyInfo.PropertyType);
                if (reflectedProperty.IsSimple)
                {
                    reflectedProperty.SimpleTypeParser = _propertyTypeManager.GetSimpleTypeParser(propertyInfo.PropertyType);
                    reflectedProperty.SimpleTypeEnum   = reflectedProperty.SimpleTypeParser.SimpleTypeEnum();
                    reflectedProperty.IsNullable       = _propertyTypeManager.IsNullableType(propertyInfo.PropertyType);
                }
                else if (_propertyTypeManager.IsCollection(propertyInfo.PropertyType))
                {
                    reflectedProperty.IsCollection           = true;
                    reflectedProperty.CollectionItemTypeName =
                        _propertyTypeManager.CollectionItemType(propertyInfo.PropertyType).Name;
                    reflectedProperty.IsNullable = true;
                }
                else
                {
                    reflectedProperty.IsComplex  = true;
                    reflectedProperty.IsNullable = true;
                }

                reflectedProperty.ReflectedPropertyOperations = _reflectedPropertyOperationsResolver();
                reflectedProperty.ReflectedPropertyOperations.PropertyInfo     = propertyInfo;
                reflectedProperty.ReflectedPropertyOperations.GetValueFunction = propertyInfo.GetValue;
                reflectedProperty.ReflectedPropertyOperations.SetValueAction   = propertyInfo.SetValue;

                reflectedClass.ReflectedProperties.Add(reflectedProperty);
                reflectedProperty.ReflectedClass = reflectedClass;
            }
        }