/// <summary>Metadata configure of the new configuration entity with provided key access function</summary>
        /// <param name="name">Name of the configuration entity</param>
        /// <returns>Registered container for the given configuration entity. It can be used for nested entities configuration.</returns>
        public ConfigurationMetaNode MetaDataConfigure <TEntity>(string name)
        {
            if (Manager.IsInitialized)
            {
                throw new InvalidOperationException(Resources.Strings.WriterLockNotHeld);
            }
            if (_metaDataByName.ContainsKey(name))
            {
                throw new InvalidOperationException(string.Format(Resources.Strings.MetaDataConfigDuplicateByName, name));
            }

            var mdConfigInfo = new MetaDataConfigurationInfoWithName <TEntity>(name);
            var mdChildNode  = new ConfigurationMetaNode(Manager, this, mdConfigInfo);

            _metaDataByName.Add(name, mdConfigInfo);
            _childNodesByName.Add(name, mdChildNode);
            return(mdChildNode);
        }
 internal ConfigurationMetaNode(ConfigurationManager manager, ConfigurationMetaNode parent, IMetaDataConfigurationInfo configMetadata)
     : this(manager, parent)
 {
     _configMetadata = configMetadata;
 }
 internal ConfigurationMetaNode(ConfigurationManager manager, ConfigurationMetaNode parent)
 {
     Manager = manager;
     Parent  = parent;
 }