/// <inheritdoc />
        protected override void PostDeserialize()
        {
            base.PostDeserialize();

            foreach (PropertyConfigurationElementBase propertyConfig in this.ImplementationProperties)
            {
                ValuePropertyConfigurationElement valueConfig = propertyConfig as ValuePropertyConfigurationElement;

                if (valueConfig != null)
                {
                    valueConfig.ConvertValue(this.ImplementationType);
                }

                ResolvePropertyConfigurationElement dependencyConfig = propertyConfig as ResolvePropertyConfigurationElement;

                if (dependencyConfig != null)
                {
                    dependencyConfig.ResolveDependencyType(this.ImplementationType);
                }

                CollectionPropertyConfigurationElement collectionConfig = propertyConfig as CollectionPropertyConfigurationElement;

                if ((collectionConfig != null) && (collectionConfig.ResolveType == CollectionPropertyConfigurationElement.CollectionResolveType.Values))
                {
                    collectionConfig.Validate(this.ImplementationType);

                    foreach (CollectionPropertyValueConfigurationElement config in collectionConfig.Values)
                    {
                        config.ConvertValue(collectionConfig.CollectionElementType);
                    }
                }
            }
        }
        protected override bool OnDeserializeUnrecognizedElement(string elementName, XmlReader reader)
        {
            PropertyConfigurationElementBase element;

            switch (elementName)
            {
            case "set":
                element = new ValuePropertyConfigurationElement();

                break;

            case "dependency":
                element = new ResolvePropertyConfigurationElement();

                break;

            case "collection":
                element = new CollectionPropertyConfigurationElement();

                break;

            default:
                return(false);
            }

            element.DeserializeElementInternal(reader);

            this.BaseAdd(element);

            return(true);
        }