protected virtual void FindAndRegisterAllBaseTypes(IEngineConfigurationProviderLoaderContext context)
 {
     foreach (IEngineConfigurationTypeProvider type in context.ConfigurationProvider.GetConfigurationTypes())
     {
         TryRegisterType(context.Configuration, type.GetConfigurationType());
     }
 }
 protected virtual void OnPostTypeLoad(IEngineConfigurationProviderLoaderContext context)
 {
     foreach (var type in context.Configuration.GetRegisteredTypes())
     {
         ApplyBaseRulesToType(context, type);
     }
 }
 protected virtual ITypeRegistrationAction CreateTypeRegistrationActions(
     IEngineConfigurationProviderLoaderContext context)
 {
     return new ApplyTypeConventionsAction(context.ConventionProvider)
                {
                    NextAction = new ApplyTypeFactoryAction(context.ConfigurationProvider)
                                     {
                                         NextAction =
                                             new RegisterTypeMembersFromConfigurationAction(
                                             context.ConfigurationProvider)
                                                 {
                                                     NextAction =
                                                         new ApplyTypeMemberConventionsAction(
                                                         context.Configuration, context.ConventionProvider)
                                                             {
                                                                 NextAction =
                                                                     new ApplyTypeMemberConfigurationAction(
                                                                     context.ConfigurationProvider)
                                                                         {
                                                                             NextAction =
                                                                                 new CascadeBaseTypeConfigurationAction
                                                                                 (context.Configuration)
                                                                         }
                                                             }
                                                 }
                                     }
                };
 }
 protected virtual void FindAndRegisterAllBaseTypes(IEngineConfigurationProviderLoaderContext context)
 {
     foreach (var type in context.ConfigurationProvider.GetConfigurationTypes())
     {
         TryRegisterType(context.Configuration, type.GetConfigurationType());
     }
 }
        public void Apply(IEngineConfigurationProviderLoaderContext context)
        {
            OnPreTypeLoad(context);

            var typeAction = this.CreateTypeRegistrationActions(context);
            foreach(var type in context.Configuration.GetRegisteredTypes()){
                typeAction.Apply(type);
            }

            OnPostTypeLoad(context);
        }
        public void Apply(IEngineConfigurationProviderLoaderContext context)
        {
            OnPreTypeLoad(context);

            var typeAction = this.CreateTypeRegistrationActions(context);

            foreach (var type in context.Configuration.GetRegisteredTypes())
            {
                typeAction.Apply(type);
            }

            OnPostTypeLoad(context);
        }
        protected virtual void ApplyBaseRulesToType(IEngineConfigurationProviderLoaderContext context, IEngineConfigurationType type)
        {
            IEnumerable <IEngineConfigurationTypeMember> membersToApply = GetAllTypeHierarchyMembers(context.Configuration, type);

            foreach (var existingMemberConfig in membersToApply)
            {
                IEngineConfigurationTypeMember currentMemberConfig = type.GetRegisteredMember(existingMemberConfig.Member);
                if (currentMemberConfig == null)
                {
                    type.RegisterMember(existingMemberConfig.Member);
                    currentMemberConfig = type.GetRegisteredMember(existingMemberConfig.Member);
                    currentMemberConfig.SetDatasources(existingMemberConfig.GetDatasources());
                }
            }
        }
        protected virtual void ApplyBaseRulesToType(IEngineConfigurationProviderLoaderContext context, IEngineConfigurationType type)
        {
            IEnumerable<IEngineConfigurationTypeMember> membersToApply = GetAllTypeHierarchyMembers(context.Configuration, type);

            foreach (var existingMemberConfig in membersToApply)
            {
                IEngineConfigurationTypeMember currentMemberConfig = type.GetRegisteredMember(existingMemberConfig.Member);
                if (currentMemberConfig == null)
                {
                    type.RegisterMember(existingMemberConfig.Member);
                    currentMemberConfig = type.GetRegisteredMember(existingMemberConfig.Member);
                    currentMemberConfig.SetDatasources(existingMemberConfig.GetDatasources());
                }
            }
        }
 protected virtual ITypeRegistrationAction CreateTypeRegistrationActions(IEngineConfigurationProviderLoaderContext context)
 {
     return(new ApplyTypeConventionsAction(context.ConventionProvider)
     {
         NextAction = new ApplyTypeFactoryAction(context.ConfigurationProvider)
         {
             NextAction = new RegisterTypeMembersFromConfigurationAction(context.ConfigurationProvider)
             {
                 NextAction = new ApplyTypeMemberConventionsAction(context.Configuration, context.ConventionProvider)
                 {
                     NextAction = new ApplyTypeMemberConfigurationAction(context.ConfigurationProvider)
                     {
                         NextAction = new CascadeBaseTypeConfigurationAction(context.Configuration)
                     }
                 }
             }
         }
     });
 }
 protected virtual void OnPreTypeLoad(IEngineConfigurationProviderLoaderContext context)
 {
     FindAndRegisterAllBaseTypes(context);
 }
 protected virtual void OnPostTypeLoad(IEngineConfigurationProviderLoaderContext context)
 {
     foreach (IEngineConfigurationType type in context.Configuration.GetRegisteredTypes())
         ApplyBaseRulesToType(context, type);
 }
 protected virtual void OnPreTypeLoad(IEngineConfigurationProviderLoaderContext context)
 {
     FindAndRegisterAllBaseTypes(context);
 }