protected virtual EntityExtensionDto GetEntityExtensionDto(
            EntityExtensionConfiguration entityConfig)
        {
            var entityExtensionDto = new EntityExtensionDto
            {
                Properties    = new Dictionary <string, ExtensionPropertyDto>(),
                Configuration = new Dictionary <string, object>()
            };

            foreach (var propertyConfig in entityConfig.GetProperties())
            {
                if (!propertyConfig.IsAvailableToClients)
                {
                    continue;
                }

                entityExtensionDto.Properties[propertyConfig.Name] = CreateExtensionPropertyDto(propertyConfig);
            }

            foreach (var customConfig in entityConfig.Configuration.Where(c => !c.Key.StartsWith("_")))
            {
                entityExtensionDto.Configuration[customConfig.Key] = customConfig.Value;
            }

            return(entityExtensionDto);
        }
    public ExtensionPropertyConfiguration(
        [NotNull] EntityExtensionConfiguration entityExtensionConfiguration,
        [NotNull] Type type,
        [NotNull] string name)
    {
        EntityExtensionConfiguration = Check.NotNull(entityExtensionConfiguration, nameof(entityExtensionConfiguration));
        Type = Check.NotNull(type, nameof(type));
        Name = Check.NotNull(name, nameof(name));

        Configuration = new Dictionary <string, object>();
        Attributes    = new List <Attribute>();
        Validators    = new List <Action <ObjectExtensionPropertyValidationContext> >();

        Entity = new ExtensionPropertyEntityConfiguration();
        UI     = new ExtensionPropertyUiConfiguration();
        Api    = new ExtensionPropertyApiConfiguration();

        Attributes.AddRange(ExtensionPropertyHelper.GetDefaultAttributes(Type));
        DefaultValue = TypeHelper.GetDefaultValue(Type);
    }