Пример #1
0
        /// <summary>
        /// 指定一个 <see cref="System.Xml.XmlNode"/> 节点动态生成一个对象。
        /// </summary>
        /// <typeparam name="TEntity">实体的类型。</typeparam>
        /// <param name="node">System.Xml.XmlNode 节点。</param>
        /// <returns>返回一个填充数据后的新实体。</returns>
        public static Result <TEntity> BuildEntity <TEntity>(XmlNode node)
            where TEntity : new()
        {
            TEntity entity = new TEntity();
            DynamicPropertyHelper <TEntity> helper = new DynamicPropertyHelper <TEntity>(entity);

            var          flags = MemberFlags.InstanceSetPropertyFlags | BindingFlags.IgnoreCase;
            PropertyInfo p;
            object       value;

            try
            {
                foreach (XmlAttribute attribute in node.Attributes)
                {
                    p = helper.GetProperty(attribute.Name, flags);
                    if (p.PropertyType == Types.String)
                    {
                        value = attribute.Value;
                    }
                    else
                    {
                        value = attribute.Value.CastTo(p.PropertyType);
                    }
                    helper[p] = attribute.Value;
                }
            }
            catch (Exception ex)
            {
                return(ex);
            }
            return(new Result <TEntity>(entity));
        }
Пример #2
0
        private IList <T> ParseResult(ArchiveExecutionContext executionContext, IList <ArchiveListItem> list)
        {
            List <T> results = new List <T>();

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

            foreach (ArchiveListItem item in list)
            {
                T t = Activator.CreateInstance <T>();
                foreach (string column in item.ColumnData.Keys)
                {
                    foreach (string propertyName in DynamicPropertyHelper.GetPropertyNames <T>(column))
                    {
                        string value       = item.ColumnData[column].DisplayValue;
                        object parsedValue = CultureDataFormatter.ParseEncoded(value);

                        parsedValue = DoTypeSpecificConversion(executionContext, DynamicPropertyHelper.GetColumnInfo(typeof(T), propertyName), parsedValue);
                        ObjectPropertyAccessor.SetValue(t, propertyName, parsedValue);
                    }
                }
                results.Add(t);
            }
            return(results);
        }
    protected override void SetDynamicValue(string propertyName, object value)
    {
        var dynamicContent = DynamicContent;

        DynamicPropertyHelper.SetDynamicProperty(ref dynamicContent, propertyName, value);
        DynamicContent = dynamicContent;
    }
Пример #4
0
        private IList <T> InnerDoQuery(RestrictionBuilderBase restrictionBuilder, OrderByBuilder orderByBuilder, int max, int skip)
        {
            ArchiveExecutionContext executionContext = _archiveExecutionContextProvider.Get();

            if (executionContext == null)
            {
                throw new InvalidOperationException(nameof(executionContext) + " not set, cannot be null");
            }

            ArchiveQueryParameters context = new ArchiveQueryParameters();

            context.ArchiveName      = executionContext.ArchiveName;
            context.Entities         = executionContext.Entities;
            context.RequestedColumns = DynamicPropertyHelper.GetAllDbColumnsPrefixed <T>();
            int page = 0;

            if (skip > 0)
            {
                page = SetPageSizeAndGetPage(skip, max, context);
            }
            if (restrictionBuilder != null)
            {
                context.Restrictions = restrictionBuilder.GetRestrictions();
            }
            if (orderByBuilder != null)
            {
                context.OrderBy = orderByBuilder.Get();
            }

            return(_resultParser.Parse <T>(executionContext, _executor.GetItems(context, max, page)));
        }
        public void TestGetColumnInfo(string propertyName, bool hasRawDbDataOn)
        {
            ColumnInfo result = DynamicPropertyHelper.GetColumnInfo(typeof(PropertyHelperTestCompany), propertyName);

            Assert.Equal("activated", result.Name);
            Assert.Equal(hasRawDbDataOn, result.UseRaw);
        }
        public void TestGetColumnNameMultiEntity()
        {
            string companyResult = DynamicPropertyHelper.GetColumnName(typeof(PropertyHelperTestCompany), "Name");
            string personResult  = DynamicPropertyHelper.GetColumnName(typeof(TestPerson), "LastName");

            Assert.Equal("name", companyResult);
            Assert.Equal("lastname", personResult);
        }
        public void TestGetAllDbColumnsPrefixed()
        {
            IList <string> results = DynamicPropertyHelper.GetAllDbColumnsPrefixed <PropertyHelperTestCompany>();

            Assert.NotEmpty(results);
            Assert.Equal(3, results.Count);
            Assert.Equal("testcompany.id", results[0]);
            Assert.Equal("testcompany.name", results[1]);
            Assert.Equal("testcompany.activated", results[2]);
        }
Пример #8
0
 /// <summary>
 /// 指定绑定动态实现的类型,初始化 Sofire.Dynamic.Dynamic&lt;I&gt; 类的新实例。
 /// </summary>
 /// <param name="instanceType">实例类型。</param>
 public Dynamic(Type instanceType)
 {
     if (instanceType == null)
     {
         throw new ArgumentNullException("instanceType");
     }
     this._Fields     = new DynamicFieldHelper <I>(instanceType);
     this._Methods    = new DynamicMethodHelper <I>(instanceType);
     this._Properties = new DynamicPropertyHelper <I>(instanceType);
 }
        public void TestGetAllDbColumns()
        {
            IList <string> results = DynamicPropertyHelper.GetAllDbColumns(typeof(PropertyHelperTestCompany));

            Assert.NotEmpty(results);
            Assert.Equal(3, results.Count);
            Assert.Equal("id", results[0]);
            Assert.Equal("name", results[1]);
            Assert.Equal("activated", results[2]);
        }
        public void TestConcurrentInitialization()
        {
            var tasks = new List <Task <string> >();

            for (int i = 0; i < 10; i++)
            {
                tasks.Add(Task.Run(() => DynamicPropertyHelper.GetColumnName <PropertyHelperTestCompany>("Name")));
            }
            Task.WaitAll(tasks.ToArray());
        }
 protected override object GetDynamicValue(string propertyName)
 {
     return(DynamicPropertyHelper.GetDynamicProperty(DynamicContent, propertyName));
 }
Пример #12
0
        public void TestColumnConfigProvider()
        {
            string test1Column = DynamicPropertyHelper.GetColumnName(typeof(TestAddress), nameof(TestAddress.Test1));

            Assert.Equal(MockColumnConfigProvider.SUCCESS_COLUMN_NAME, test1Column);
        }
        public void TestGetPropertyNamesGeneric()
        {
            string[] results = DynamicPropertyHelper.GetPropertyNames <PropertyHelperTestCompany>("id");

            Assert.Equal(new[] { "PK", "Id" }, results);
        }
        public void TestGetPropertyNames(string columnName, string[] expected)
        {
            string[] results = DynamicPropertyHelper.GetPropertyNames(typeof(PropertyHelperTestCompany), columnName);

            Assert.Equal(expected, results);
        }
        public void TestGetFullDotSyntaxColumnNameGeneric()
        {
            string result = DynamicPropertyHelper.GetFullDotSyntaxColumnName <PropertyHelperTestCompany>("id");

            Assert.Equal("testcompany.id", result);
        }
        public void TestGetFullDotSyntaxColumnName()
        {
            string result = DynamicPropertyHelper.GetFullDotSyntaxColumnName("person", "id");

            Assert.Equal("person.id", result);
        }
Пример #17
0
 /// <summary>
 /// 指定绑定动态实现的实例,初始化 Sofire.Dynamic.Dynamic&lt;I&gt; 类的新实例。
 /// </summary>
 /// <param name="instance">实例。可以为 null,表示动态实现 I 的静态字段。</param>
 public Dynamic(I instance)
 {
     this._Fields     = new DynamicFieldHelper <I>(instance);
     this._Methods    = new DynamicMethodHelper <I>(instance);
     this._Properties = new DynamicPropertyHelper <I>(instance);
 }
Пример #18
0
        public void Add(string property, EOperator op, int level, InterRestrictionOperator interOperator, object value)
        {
            string column = DynamicPropertyHelper.GetColumnName <T>(property);

            AddRestriction <T>(column, op, interOperator, level, value);
        }
Пример #19
0
 protected override Expression VisitMember(MemberExpression expression)
 {
     _column = DynamicPropertyHelper.GetColumnName(expression.Member.DeclaringType, expression.Member.Name);
     return expression;
 }
        public void TestGetTableName()
        {
            string name = DynamicPropertyHelper.GetTableName(new PropertyHelperTestCompany());

            Assert.Equal("testcompany", name);
        }
Пример #21
0
        protected ArchiveRestrictionInfo CreateRestriction <T>(string column, EOperator op, InterRestrictionOperator interRestrictionOperator, int level, params object[] values)
        {
            string fullColumnName = DynamicPropertyHelper.GetFullDotSyntaxColumnName <T>(column);

            return(CreateRestriction(fullColumnName, op, interRestrictionOperator, level, values));
        }
        public void TestGetColumnName()
        {
            string result = DynamicPropertyHelper.GetColumnName(typeof(PropertyHelperTestCompany), "Id");

            Assert.Equal("id", result);
        }
        public void AddOrder <T>(string column, bool asc)
        {
            string fullColumnName = DynamicPropertyHelper.GetFullDotSyntaxColumnName <T>(column);

            AddOrder(fullColumnName, asc);
        }
Пример #24
0
        private static string DisplayProperty(List <object> objectContainer, object instance, int depth)
        {
            if (instance == null)
            {
                return("null");
            }
            var    helper      = new DynamicPropertyHelper <object>(instance);
            string spaceString = depth == 0 ? string.Empty : new string(' ', depth * 4);

            string        propertySpaceString = spaceString + "    ";
            StringBuilder builder             = new StringBuilder();

            builder.Append('#');
            builder.Append(helper.InstanceType.Name);
            builder.AppendLine();
            builder.Append(spaceString);
            builder.Append('{');
            foreach (var propertyInfo in helper.GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.GetProperty | System.Reflection.BindingFlags.Public))
            {
                builder.AppendLine();
                builder.Append(propertySpaceString);
                builder.Append(propertyInfo.Name);
                builder.Append(' ');
                builder.Append(':');
                builder.Append(' ');

                /*
                 * #SimpleUser
                 * {
                 *      ID : 5
                 * }
                 */
                var propertyValue = helper.CreateGetterHandler(propertyInfo)(instance);
                if (propertyValue == null)
                {
                    builder.Append("null");
                }
                else
                {
                    var index = objectContainer.IndexOf(propertyValue);

                    if (index > -1)
                    {
                        index++;
                        PropertyInfo info = (PropertyInfo)objectContainer[index];
                        builder.Append("[#");
                        builder.Append(info.DeclaringType.FullName);
                        builder.Append("].");
                        builder.Append(info.Name);
                        continue;
                    }
                    Type valueType = propertyValue.GetType();
                    if (!valueType.IsValueType)
                    {
                        objectContainer.Add(propertyValue);
                        objectContainer.Add(propertyInfo);
                    }
                    switch (Type.GetTypeCode(valueType))
                    {
                    case TypeCode.Empty:
                        builder.Append("Empty");
                        break;

                    case TypeCode.DBNull:
                        builder.Append("DBNull.Value");
                        break;

                    case TypeCode.Char:
                        builder.Append('\'');
                        builder.Append(propertyValue);
                        builder.Append('\'');
                        break;

                    case TypeCode.String:
                        builder.Append('"');
                        builder.Append(propertyValue);
                        builder.Append('"');
                        break;

                    case TypeCode.Object:
                        builder.Append(DisplayProperty(objectContainer, propertyValue, depth + 1));
                        break;

                    default:
                        builder.Append(propertyValue);
                        break;
                    }
                }
                builder.Append(",");
            }

            builder.AppendLine();
            builder.Append(spaceString);
            builder.Append('}');

            return(builder.ToString());
        }