protected virtual IEnumerable <IEngineConfigurationTypeMember> GetAllTypeHierarchyMembers(IEngineConfiguration baseConfiguration, IEngineConfigurationType sourceType)
        {
            Stack <IEngineConfigurationType> configurationStack = new Stack <IEngineConfigurationType>();
            Type currentType = sourceType.RegisteredType;
            IEngineConfigurationType currentTypeConfiguration = null;

            // Get all the base types into a stack, where the base-most type is at the top
            while (currentType != null)
            {
                currentTypeConfiguration = baseConfiguration.GetRegisteredType(currentType);
                if (currentTypeConfiguration != null)
                {
                    configurationStack.Push(currentTypeConfiguration);
                }
                currentType = currentType.BaseType;
            }

            // Put all the implemented interfaces on top of that
            foreach (var interfaceType in sourceType.RegisteredType.GetInterfaces())
            {
                currentTypeConfiguration = baseConfiguration.GetRegisteredType(interfaceType);
                if (currentTypeConfiguration != null)
                {
                    configurationStack.Push(currentTypeConfiguration);
                }
            }

            var membersToApply = (from typeConfig in configurationStack
                                  from memberConfig in typeConfig.GetRegisteredMembers()
                                  select memberConfig).ToArray();

            return(membersToApply);
        }
Пример #2
0
 private void ApplyToType(IEngineConfigurationType type)
 {
     foreach (var member in type.GetRegisteredMembers())
     {
         ApplyToTypeMember(member);
     }
 }
 public override void Apply(IEngineConfigurationType type)
 {
     mConventionProvider.Find<ITypeConvention>()
         .Select(t => (ITypeConvention)Activator.CreateInstance(t))
         .ToList()
         .ForEach(x => x.Apply(new TypeConventionContext(type)));
 }
        protected virtual IEnumerable<IEngineConfigurationTypeMember> GetAllTypeHierarchyMembers(IEngineConfiguration baseConfiguration, IEngineConfigurationType sourceType)
        {
            Stack<IEngineConfigurationType> configurationStack = new Stack<IEngineConfigurationType>();
            Type currentType = sourceType.RegisteredType;
            IEngineConfigurationType currentTypeConfiguration = null;

            // Get all the base types into a stack, where the base-most type is at the top
            while (currentType != null)
            {
                currentTypeConfiguration = baseConfiguration.GetRegisteredType(currentType);
                if (currentTypeConfiguration != null) { configurationStack.Push(currentTypeConfiguration); }
                currentType = currentType.BaseType;
            }

            // Put all the implemented interfaces on top of that
            foreach (var interfaceType in sourceType.RegisteredType.GetInterfaces())
            {
                currentTypeConfiguration = baseConfiguration.GetRegisteredType(interfaceType);
                if (currentTypeConfiguration != null)
                {
                    configurationStack.Push(currentTypeConfiguration);
                }
            }

            var membersToApply = (from typeConfig in configurationStack
                                  from memberConfig in typeConfig.GetRegisteredMembers()
                                  select memberConfig).ToArray();

            return membersToApply;
        }
 public override void Apply(IEngineConfigurationType type)
 {
     mConventionProvider.Find <ITypeConvention>()
     .Select(t => (ITypeConvention)Activator.CreateInstance(t))
     .ToList()
     .ForEach(x => x.Apply(new TypeConventionContext(type)));
 }
 private void ApplyToType(IEngineConfigurationType type)
 {
     foreach (IEngineConfigurationTypeMember member in type.GetRegisteredMembers())
     {
         ApplyToTypeMember(member);
     }
 }
 void ITypeRegistrationAction.Apply(IEngineConfigurationType type)
 {
     Apply(type);
     if (NextAction != null)
     {
         NextAction.Apply(type);
     }
 }
Пример #8
0
 void ITypeRegistrationAction.Apply(IEngineConfigurationType type)
 {
     this.Apply(type);
     if (NextAction != null)
     {
         NextAction.Apply(type);
     }
 }
        private IObjectBuilder CreateBuilderForType(Type searchType)
        {
            EnsureTypeExists(searchType);
            IEngineConfigurationType type = mConfiguration.GetRegisteredType(searchType);
            var builder = new ObjectBuilder(type);

            mObjectBuilders.Add(builder);
            return(builder);
        }
        public void Setup()
        {
            this.Builder.Conventions(x =>
            {
                x.Register<TestTypeConvention>();
            });
            this.Builder.Include<TestTypeClass>();

            mConfiguration = new EngineConfigurationFactory().Create(this.Builder, this.Builder.ConventionProvider);
            mType = mConfiguration.GetRegisteredType(typeof(TestTypeClass));
        }
        public void Setup()
        {
            this.Builder.Conventions(x =>
            {
                x.Register <TestTypeConvention>();
            });
            this.Builder.Include <TestTypeClass>();

            mConfiguration = new EngineConfigurationFactory().Create(this.Builder, this.Builder.ConventionProvider);
            mType          = mConfiguration.GetRegisteredType(typeof(TestTypeClass));
        }
        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());
                }
            }
        }
        public void Setup()
        {
            this.Builder.Conventions(x =>
            {
                x.Register<TestPropertyConvention>();
            });
            this.Builder.Include<TestPropertyClass>()
                .Setup(x => x.Test).Default()
                .Setup(x => x.TestIgnore);

            mConfiguration = new EngineConfigurationFactory().Create(this.Builder, this.Builder.ConventionProvider);
            mType = mConfiguration.GetRegisteredType(typeof(TestPropertyClass));
            mTestProperty = mType.GetRegisteredMembers().Where(x => x.Member.Name == "Test").Single();
            mTestIgnoreProperty = mType.GetRegisteredMembers().Where(x => x.Member.Name == "TestIgnore").Single();
        }
        public void Setup()
        {
            this.Builder.Conventions(x =>
            {
                x.Register <TestFieldConvention>();
            });
            this.Builder.Include <TestFieldClass>()
            .Setup(x => x.Test).Default()
            .Setup(x => x.TestIgnore);

            mConfiguration   = new EngineConfigurationFactory().Create(this.Builder, this.Builder.ConventionProvider);
            mType            = mConfiguration.GetRegisteredType(typeof(TestFieldClass));
            mTestField       = mType.GetRegisteredMembers().Where(x => x.Member.Name == "Test").Single();
            mTestIgnoreField = mType.GetRegisteredMembers().Where(x => x.Member.Name == "TestIgnore").Single();
        }
        private void ApplyToType(IEngineConfigurationType type)
        {
            // Create the dependency stack
            IEnumerable<IEngineConfigurationTypeMember> membersToApply = GetAllTypeHierarchyMembers(mConfiguration, 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());
                }
            }
        }
        private void ApplyToType(IEngineConfigurationType type)
        {
            var typeProviders = mConfigurationProvider.GetConfigurationTypes().Where(x => x.GetConfigurationType() == type.RegisteredType);
            foreach (var typeProvider in typeProviders)
            {
                foreach (var member in typeProvider.GetConfigurationMembers())
                {
                    EngineTypeMember typeMember = member.GetConfigurationMember();

                    if (type.GetRegisteredMember(typeMember) == null)
                    {
                        type.RegisterMember(typeMember);
                    }
                }
            }
        }
        private void ApplyToType(IEngineConfigurationType type)
        {
            // Create the dependency stack
            IEnumerable <IEngineConfigurationTypeMember> membersToApply = GetAllTypeHierarchyMembers(mConfiguration, 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());
                }
            }
        }
        public void SetupObjects()
        {
            this.Builder.Include <SimpleMethodClass>()
            .Invoke(x => x.SetSomething("Literal"))
            .Invoke(x => x.SetSomething(
                        Use.Source <String, FirstNameSource>(),
                        Use.Source <String, LastNameSource>()));

            Configuration = new EngineConfigurationFactory().Create(this.Builder, this.Builder.ConventionProvider);

            // Get some info for the tests
            mEngineConfigurationType = Configuration.GetRegisteredType(typeof(SimpleMethodClass));
            mSingleArgMethod         = (EngineTypeMethodMember)ReflectionHelper.GetMember(
                typeof(SimpleMethodClass).GetMethod("SetSomething", new Type[] { typeof(string) }));
            mDoubleArgMethod = (EngineTypeMethodMember)ReflectionHelper.GetMember(
                typeof(SimpleMethodClass).GetMethod("SetSomething", new Type[] { typeof(string), typeof(string) }));
        }
Пример #19
0
        public override void Apply(IEngineConfigurationType type)
        {
            var typeProvider =
                mConfigurationProvider.GetConfigurationTypes().Where(x => x.GetConfigurationType() == type.RegisteredType)
                .FirstOrDefault();

            if (typeProvider != null && typeProvider.GetFactory() != null)
            {
                type.SetFactory(typeProvider.GetFactory());
            }
            else if (type.GetFactory() == null)
            {
                // Activator.CreateInstance as a last resort
                Type fallbackType = typeof(FallbackObjectFactory <>).MakeGenericType(type.RegisteredType);
                type.SetFactory(new DatasourceFactory(fallbackType));
            }
        }
        public override void Apply(IEngineConfigurationType type)
        {
            var typeProvider =
                mConfigurationProvider.GetConfigurationTypes().Where(x => x.GetConfigurationType() == type.RegisteredType)
                    .FirstOrDefault();

            if(typeProvider != null && typeProvider.GetFactory() != null)
            {
                type.SetFactory(typeProvider.GetFactory());
            }
            else if (type.GetFactory() == null)
            {
                // Activator.CreateInstance as a last resort
                Type fallbackType = typeof (FallbackObjectFactory<>).MakeGenericType(type.RegisteredType);
                type.SetFactory(new DatasourceFactory(fallbackType));
            }
        }
        private void ApplyToType(IEngineConfigurationType type)
        {
            var typeProviders = mConfigurationProvider.GetConfigurationTypes().Where(x => x.GetConfigurationType() == type.RegisteredType);

            foreach (var typeProvider in typeProviders)
            {
                foreach (var member in typeProvider.GetConfigurationMembers())
                {
                    EngineTypeMember typeMember = member.GetConfigurationMember();

                    if (type.GetRegisteredMember(typeMember) == null)
                    {
                        type.RegisterMember(typeMember);
                    }
                }
            }
        }
Пример #22
0
        /// <summary>
        /// Creates this object builder
        /// </summary>
        /// <param name="type"></param>
        public ObjectBuilder(IEngineConfigurationType type)
        {
            this.InnerType = type.RegisteredType;

            if (type.GetFactory() != null)
            {
                mFactory = type.GetFactory().Build();
            }

            type.GetRegisteredMembers()
            .ToList()
            .ForEach(x =>
            {
                var sources = x.GetDatasources().Select(s => s.Build()).ToList();

                if (x.Member.IsField)
                {
                    if (sources.Count == 0)
                    {
                        return;
                    }

                    this.AddAction(new ObjectFieldSetFromSourceAction(
                                       (EngineTypeFieldMember)x.Member,
                                       sources.First()));
                }
                else if (x.Member.IsProperty)
                {
                    if (sources.Count == 0)
                    {
                        return;
                    }

                    this.AddAction(new ObjectPropertySetFromSourceAction(
                                       (EngineTypePropertyMember)x.Member,
                                       sources.First()));
                }
                else if (x.Member.IsMethod)
                {
                    this.AddAction(new ObjectMethodInvokeFromSourceAction(
                                       (EngineTypeMethodMember)x.Member,
                                       sources
                                       ));
                }
            });
        }
Пример #23
0
        /// <summary>
        /// Creates this object builder
        /// </summary>
        /// <param name="type"></param>
        public ObjectBuilder(IEngineConfigurationType type)
        {
            InnerType = type.RegisteredType;

            if (type.GetFactory() != null)
            {
                mFactory = type.GetFactory().Build();
            }

            type.GetRegisteredMembers()
                .ToList()
                .ForEach(x =>
                             {
                                 List<IDatasource> sources = x.GetDatasources().Select(s => s.Build()).ToList();

                                 if (x.Member.IsField)
                                 {
                                     if (sources.Count == 0)
                                     {
                                         return;
                                     }

                                     AddAction(new ObjectFieldSetFromSourceAction(
                                                   (EngineTypeFieldMember) x.Member,
                                                   sources.First()));
                                 }
                                 else if (x.Member.IsProperty)
                                 {
                                     if (sources.Count == 0)
                                     {
                                         return;
                                     }

                                     AddAction(new ObjectPropertySetFromSourceAction(
                                                   (EngineTypePropertyMember) x.Member,
                                                   sources.First()));
                                 }
                                 else if (x.Member.IsMethod)
                                 {
                                     AddAction(new ObjectMethodInvokeFromSourceAction(
                                                   (EngineTypeMethodMember) x.Member,
                                                   sources
                                                   ));
                                 }
                             });
        }
        private void ApplyToType(IEngineConfigurationType type)
        {
            var typeProviders = mConfigurationProvider.GetConfigurationTypes()
                                .Where(x => x.GetConfigurationType() == type.RegisteredType);

            foreach (var typeProvider in typeProviders)
            {
                foreach (var memberProvider in typeProvider.GetConfigurationMembers())
                {
                    EngineTypeMember typeMember = memberProvider.GetConfigurationMember();

                    // Get the member
                    var configuredMember = type.GetRegisteredMember(typeMember);

                    // Set the action on that member if a datasource has been set explicitly for this member
                    var datasources = memberProvider.GetDatasources();
                    if (datasources.Count() > 0)
                    {
                        configuredMember.SetDatasources(datasources);
                    }
                }
            }
        }
        private void ApplyToType(IEngineConfigurationType type)
        {
            var typeProviders = mConfigurationProvider.GetConfigurationTypes()
                .Where(x => x.GetConfigurationType() == type.RegisteredType);

            foreach (var typeProvider in typeProviders)
            {
                foreach (var memberProvider in typeProvider.GetConfigurationMembers())
                {
                    EngineTypeMember typeMember = memberProvider.GetConfigurationMember();

                    // Get the member
                    var configuredMember = type.GetRegisteredMember(typeMember);

                    // Set the action on that member if a datasource has been set explicitly for this member
                    var datasources = memberProvider.GetDatasources();
                    if (datasources.Count() > 0)
                    {
                        configuredMember.SetDatasources(datasources);
                    }
                }
            }
        }
 public override void Apply(IEngineConfigurationType type)
 {
     ApplyToType(type);
 }
 public abstract void Apply(IEngineConfigurationType type);
Пример #28
0
 public abstract void Apply(IEngineConfigurationType type);
 public override void Apply(IEngineConfigurationType type)
 {
     ApplyToType(type);
 }
Пример #30
0
 public TypeConventionContext(IEngineConfigurationType type)
 {
     mType = type;
 }
 public TypeConventionContext(IEngineConfigurationType type)
 {
     mType = type;
 }
        public void SetupObjects()
        {
            this.Builder.Include<SimpleMethodClass>()
                .Invoke(x=>x.SetSomething("Literal"))
                .Invoke(x=>x.SetSomething(
                    Use.Source<String, FirstNameSource>(),
                    Use.Source<String, LastNameSource>()));

            Configuration = new EngineConfigurationFactory().Create(this.Builder, this.Builder.ConventionProvider);

            // Get some info for the tests
            mEngineConfigurationType = Configuration.GetRegisteredType(typeof(SimpleMethodClass));
            mSingleArgMethod = (EngineTypeMethodMember)ReflectionHelper.GetMember(
                typeof(SimpleMethodClass).GetMethod("SetSomething", new Type[] { typeof(string) }));
            mDoubleArgMethod = (EngineTypeMethodMember)ReflectionHelper.GetMember(
                typeof(SimpleMethodClass).GetMethod("SetSomething", new Type[] { typeof(string), typeof(string) }));
        }
        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());
                }
            }
        }