protected IObjectTypeConfig <S, T> Config(IObjectTypeConfig <S, T> config)
        {
            return(new ObjectTypeConfig <S, T>
            {
                Name = config.Name ?? Name,

                Hooks = new[] { Hooks, config.Hooks }
                .SelectMany(d => d)
                .GroupBy
                (
                    kvp => kvp.Key,
                    (key, kvps) => new { Key = key, Value = kvps.SelectMany(x => x.Value).ToList() }
                )
                .ToDictionary(x => x.Key, y => y.Value),

                Mutables = config.Mutables.Concat(Mutables).ToList(),

                Volatiles = config.Volatiles.Concat(Volatiles).ToList(),

                Views = Views.Concat(config.Views).Distinct().ToList(),

                Actions = Actions.Concat(config.Actions).Distinct().ToList(),

                Initializers = config.Initializers.Concat(Initializers).ToList(),

                PreProcessor = config.PreProcessor ?? PreProcessor,

                Proxify = config.Proxify ?? Proxify,

                Snapshoty = config.Snapshoty ?? Snapshoty
            });
        }