private ShadowPropertyDefinition AddShadowPropertyDefinition(String propertyName, Type propertyType)
        {
            _shadowPropertyIndex++;

            String     shadowPropertyIndex   = _shadowPropertyIndex.ToString(CultureInfo.InvariantCulture);
            String     shadowPropertyGetName = "ShadowPropertyGet" + shadowPropertyIndex;
            MethodInfo?getMethodInfo         = typeof(Types.DynamicType).GetMethod(shadowPropertyGetName, BindingFlags.Instance | BindingFlags.NonPublic);

            if (getMethodInfo == null)
            {
                throw new InvalidOperationException(shadowPropertyGetName + " out of range, property name " + propertyName);
            }

            getMethodInfo = getMethodInfo.GetGenericMethodDefinition().MakeGenericMethod(new Type[] { propertyType });

            String    shadowPropertyFieldName = "ShadowProperty" + shadowPropertyIndex;
            FieldInfo?fieldInfo = typeof(Types.DynamicType).GetField(shadowPropertyFieldName, BindingFlags.Instance | BindingFlags.NonPublic);

            if (fieldInfo == null)
            {
                throw new InvalidOperationException(shadowPropertyFieldName + " out of range, proeprty name " + propertyName);
            }

            var shadowPropertyDefinition = new ShadowPropertyDefinition(getMethodInfo, fieldInfo);

            _shadowPropertyDefinitions.Add(propertyName, shadowPropertyDefinition);
            _shadowPropertyFieldInfoByGetName.Add(shadowPropertyGetName, fieldInfo);
            return(shadowPropertyDefinition);
        }
Exemple #2
0
        private ShadowPropertyDefinition AddShadowPropertyDefinition(String propertyName, Type propertyType)
        {
            _shadowPropertyIndex++;

            String     shadowPropertyIndex   = _shadowPropertyIndex.ToString("D2");
            String     shadowPropertyGetName = "ShadowPropertyGet" + shadowPropertyIndex;
            MethodInfo getMethodInfo         = typeof(DynamicType).GetMethod(shadowPropertyGetName, BindingFlags.Instance | BindingFlags.NonPublic);

            getMethodInfo = getMethodInfo.GetGenericMethodDefinition().MakeGenericMethod(new Type[] { propertyType });

            String    shadowPropertyFieldName = "ShadowProperty" + shadowPropertyIndex;
            FieldInfo fieldInfo = typeof(DynamicType).GetField(shadowPropertyFieldName, BindingFlags.Instance | BindingFlags.NonPublic);

            var shadowPropertyDefinition = new ShadowPropertyDefinition(getMethodInfo, fieldInfo);

            _shadowPropertyDefinitions.Add(propertyName, shadowPropertyDefinition);
            _shadowPropertyFieldInfoByGetName.Add(shadowPropertyGetName, fieldInfo);
            return(shadowPropertyDefinition);
        }