// Token: 0x0600012B RID: 299 RVA: 0x000057D0 File Offset: 0x000039D0 protected ConfigObject ConstructConfigObject(Type objectType, DataSourceInfo dsi, PropertyBag propertyBag, bool fIsNew) { ConfigObjectDelegate configObjectDelegate = null; ConstructorInfo constructorInfo = null; this.StampStorageIdentity(propertyBag); object obj = DataSourceManager.constructorHashtable[objectType]; if (obj == null) { DataSourceManager.CacheObjectCreationInfo(objectType, ref configObjectDelegate, ref constructorInfo); } else { configObjectDelegate = (obj as ConfigObjectDelegate); constructorInfo = (obj as ConstructorInfo); } ConfigObject configObject; if (configObjectDelegate != null) { configObject = configObjectDelegate(propertyBag); } else { configObject = (ConfigObject)constructorInfo.Invoke(null); configObject.SetIsNew(fIsNew); configObject.Fields = propertyBag; } configObject.SetDataSourceInfo(dsi); configObject.InitializeDefaults(); configObject.Fields.ResetChangeTracking(); return(configObject); }
// Token: 0x0600012E RID: 302 RVA: 0x000059B0 File Offset: 0x00003BB0 private static void CacheObjectCreationInfo(Type classType, ref ConfigObjectDelegate configObjectDelegate, ref ConstructorInfo configObjectConstructorInfo) { MethodInfo method = classType.GetMethod("CreateInstance", BindingFlags.Static | BindingFlags.Public); object value; if (null != method) { configObjectDelegate = (ConfigObjectDelegate)Delegate.CreateDelegate(typeof(ConfigObjectDelegate), method); value = configObjectDelegate; } else { configObjectConstructorInfo = classType.GetConstructor(Type.EmptyTypes); value = configObjectConstructorInfo; } lock (typeof(DataSourceManager)) { DataSourceManager.constructorHashtable[classType] = value; } }