Inheritance: IPageTypeDefinitionLocator
        /// <summary>
        /// Default imlementation of <see cref="IContentTypeModelFilter"/>. this implementation remove all the pageTypedefinitions.types from a list of types
        /// </summary>
        public IList<Type> Filter(IList<Type> types)
        {
            var definitions = new PageTypeDefinitionLocator(new AppDomainAssemblyLocator()).GetPageTypeDefinitions();

            foreach (Type t in definitions.Select(d => d.Type))
            {
                types.Remove(t);            
            }

            return types;
        }
        public void Initialize(InitializationEngine context)
        {
            var assemblyLocator = new AppDomainAssemblyLocator();
            var pageTypeLocator = new PageTypeLocator(new PageTypeFactory());
            var pageTypeDefinitionLocator = new PageTypeDefinitionLocator(
                assemblyLocator);
            var pageTypeUpdater = new PageTypeUpdater(
                pageTypeDefinitionLocator,
                new PageTypeFactory(), 
                new PageTypeValueExtractor(),
                pageTypeLocator);
            var globalPropertySettingsLocator = new GlobalPropertySettingsLocator(assemblyLocator);
            var propertySettingsRepository = new PropertySettingsRepository();
            var pageTypePropertyUpdater = new PageTypePropertyUpdater(
                new PageDefinitionFactory(),
                new PageDefinitionTypeFactory(), 
                new TabFactory(),
                propertySettingsRepository,
                globalPropertySettingsLocator);

            var tabDefinitionUpdater = new TabDefinitionUpdater(new TabFactory());

            var tabLocator = new TabLocator(assemblyLocator);

            PageTypeSynchronizer synchronizer = new PageTypeSynchronizer(
                pageTypeDefinitionLocator, 
                Configuration,
                pageTypePropertyUpdater,
                new PageTypeDefinitionValidator(new PageDefinitionTypeMapper(new PageDefinitionTypeFactory())), 
                PageTypeResolver.Instance,
                pageTypeLocator,
                pageTypeUpdater,
                tabDefinitionUpdater,
                tabLocator,
                new GlobalPropertySettingsSynchronizer(propertySettingsRepository, globalPropertySettingsLocator));
            synchronizer.SynchronizePageTypes();

            DataFactory.Instance.LoadedPage += DataFactory_LoadedPage;
            DataFactory.Instance.LoadedChildren += DataFactory_LoadedChildren;
            DataFactory.Instance.LoadedDefaultPageData += DataFactory_LoadedPage;
        }