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