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); }
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); }