private IEnumerable <BuildPass <T> > GetBuildPasses()
        {
            return(Enum
                   .GetValues(typeof(T))
                   .Cast <T>()
                   .Select(s =>
            {
                var pass = BuildPass <T> .Create(s, EntityType, EntityHelper, Settings, Builder, Roots, Enumerations, Code, PluralizationService);
                var section = GetSection(s, pass);

                pass.Section = section;

                return pass;
            }));
        }
        private ISection GetSection(T buildSection, BuildPass <T> pass)
        {
            ISection returnValue = null;

            TypeSwitch.On <T>
            (
                TypeSwitch.Case <eBuildSectionEntity>(() =>
            {
                returnValue = AFSectionFactoryEntity.CreateSection(buildSection, pass);
            }),
                TypeSwitch.Case <eBuildSectionEntityPartial>(() =>
            {
                returnValue = AFSectionFactoryEntityPartial.CreateSection(buildSection, pass);
            }),
                TypeSwitch.Case <eBuildSectionContext>(() =>
            {
                returnValue = AFSectionFactoryContext.CreateSection(buildSection, pass);
            }),
                TypeSwitch.Case <eBuildSectionMapping>(() =>
            {
                returnValue = AFSectionFactoryMapping.CreateSection(buildSection, pass);
            }),
                TypeSwitch.Case <eBuildSectionService>(() =>
            {
                returnValue = AFSectionFactoryService.CreateSection(buildSection, pass);
            }),
                TypeSwitch.Case <eBuildSectionServiceInterface>(() =>
            {
                returnValue = AFSectionFactoryServiceInterface.CreateSection(buildSection, pass);
            }),
                TypeSwitch.Case <eBuildSectionEnumeration>(() =>
            {
                returnValue = AFSectionFactoryEnumeration.CreateSection(buildSection, pass);
            }),
                TypeSwitch.Case <eBuildSectionAppContext>(() =>
            {
                returnValue = AFSectionFactoryAppContext.CreateSection(buildSection, pass);
            }),
                TypeSwitch.Case <eBuildSectionContract>(() =>
            {
                returnValue = AFSectionFactoryContract.CreateSection(buildSection, pass);
            }),
                TypeSwitch.Case <eBuildSectionAppService>(() =>
            {
                returnValue = AFSectionFactoryAppService.CreateSection(buildSection, pass);
            }),
                TypeSwitch.Case <eBuildSectionAppServiceInterface>(() =>
            {
                returnValue = AFSectionFactoryAppServiceInterface.CreateSection(buildSection, pass);
            }),
                TypeSwitch.Case <eBuildSectionControllerApi>(() =>
            {
                returnValue = AFSectionFactoryControllerApi.CreateSection(buildSection, pass);
            }),
                TypeSwitch.Case <eBuildSectionControllerMvc>(() =>
            {
                returnValue = AFSectionFactoryControllerMvc.CreateSection(buildSection, pass);
            }),
                TypeSwitch.Case <eBuildSectionAutoMapperProfile>(() =>
            {
                returnValue = AFSectionFactoryAutoMapperProfile.CreateSection(buildSection, pass);
            }),
                TypeSwitch.Default(() =>
            {
                throw new NotSupportedException(string.Concat("Unsupported section type:  ", typeof(T).Name));
            })
            );

            return(returnValue);
        }