예제 #1
0
        public void Bind(BindableConfiguration bindableConfiguration, params ICreateExecutableMapping[] configurations)
        {
            if (configurations == null || configurations.Length == 0)
            {
                return;
            }

            var children = configurations.ToDictionary(k => new ConfigurationPropertyCriterion(k), v => v);

            foreach (var childCfg in children)
            {
                KeyValuePair <ConfigurationPropertyCriterion, ICreateExecutableMapping> cfg = childCfg;
                foreach (var destinationProperty in bindableConfiguration.DestinationProperties.Where(destProp => cfg.Key.IsSatisfiedBy(destProp)))
                {
                    var copy = destinationProperty;
                    foreach (var sourceContext in bindableConfiguration.SourceContexts.Where(sourceContext => sourceContext.RequiresComponentConfigurationFor(copy)))
                    {
                        Logger.Create(this).Debug("Extending configuration on '{0}' from '{1}' for property '{2}'", bindableConfiguration.DestinationType, childCfg.Value.DestinationType, copy.Name);
                        var resolverContext = new ResolverContext(sourceContext.CreateProperty(destinationProperty), destinationProperty, childCfg.Value);
                        if (sourceContext.TrySetResolver(destinationProperty, resolvers.CreateRedirectingConfigurationResolver(resolverContext)) == false)
                        {
                            Logger.Create(this).Info("{0} will not be overriden on {1} using {2}", destinationProperty, sourceContext, resolverContext);
                        }
                    }
                }
            }
        }
예제 #2
0
        public void Bind(BindableConfiguration bindableConfiguration, params ICreateExecutableMapping[] configurations)
        {
            var candidates = GetCandidateDestinationProperties(bindableConfiguration);
            var candidateElements = candidates.Select(its => its.PropertyType.ElementType());
            var filteredConfigs = configurations.Where(cfg => candidateElements.Contains(cfg.DestinationType));
            var candidate2Cfg=new Dictionary<IDescribeMappableProperty, List<ICreateExecutableMapping>>();
            foreach (var cand in candidates)
            {
                List<ICreateExecutableMapping> cfgs;
                if(candidate2Cfg.TryGetValue(cand,out cfgs)==false)
                {
                    candidate2Cfg.Add(cand,cfgs=new List<ICreateExecutableMapping>());
                }
                cfgs.AddRange(filteredConfigs);
            }
            foreach (var candidate in candidate2Cfg)
            {
                var copy = candidate;
                foreach (var sourceContext in bindableConfiguration.SourceContexts.Where(it => it.RequiresCollectionConfigurationFor(copy.Key)))
                {
                    /*be sure we set resolver for each property that has a list element matching*/
                    foreach (var createExecutableMapping in candidate.Value)
                    {
                        var resolverContext = new ResolverContext(sourceContext.CreateProperty(copy.Key), copy.Key, createExecutableMapping);
                        var resolver = resolvers.CreateListResolver(resolverContext);
                        if(sourceContext.TrySetResolver(candidate.Key, resolver)==false)
                        {
                            Logger.Create(this).Info("{0} will not be overriden on {1} using {2}",candidate.Key,sourceContext,resolver);
                        }
                    }

                }
            }
        }
예제 #3
0
        public void Bind(BindableConfiguration bindableConfiguration, params ICreateExecutableMapping[] configurations)
        {
            var candidates        = GetCandidateDestinationProperties(bindableConfiguration);
            var candidateElements = candidates.Select(its => its.PropertyType.ElementType());
            var filteredConfigs   = configurations.Where(cfg => candidateElements.Contains(cfg.DestinationType));
            var candidate2Cfg     = new Dictionary <IDescribeMappableProperty, List <ICreateExecutableMapping> >();

            foreach (var cand in candidates)
            {
                List <ICreateExecutableMapping> cfgs;
                if (candidate2Cfg.TryGetValue(cand, out cfgs) == false)
                {
                    candidate2Cfg.Add(cand, cfgs = new List <ICreateExecutableMapping>());
                }
                cfgs.AddRange(filteredConfigs);
            }
            foreach (var candidate in candidate2Cfg)
            {
                var copy = candidate;
                foreach (var sourceContext in bindableConfiguration.SourceContexts.Where(it => it.RequiresCollectionConfigurationFor(copy.Key)))
                {
                    /*be sure we set resolver for each property that has a list element matching*/
                    foreach (var createExecutableMapping in candidate.Value)
                    {
                        var resolverContext = new ResolverContext(sourceContext.CreateProperty(copy.Key), copy.Key, createExecutableMapping);
                        var resolver        = resolvers.CreateListResolver(resolverContext);
                        if (sourceContext.TrySetResolver(candidate.Key, resolver) == false)
                        {
                            Logger.Create(this).Info("{0} will not be overriden on {1} using {2}", candidate.Key, sourceContext, resolver);
                        }
                    }
                }
            }
        }
예제 #4
0
 public void Visit(BindableConfiguration bindableConfiguration)
 {
     var mapped = ResolverPrecedence.ToResolverContainer(bindableConfiguration);
     foreach (var item in mapped)
     {
         item.Value.Source(bindableConfiguration.DestinationProperties);
         bindableConfiguration.SourceResolverContainer(item.Key, item.Value);
     }
 }
예제 #5
0
        public void Visit(BindableConfiguration bindableConfiguration)
        {
            var mapped = ResolverPrecedence.ToResolverContainer(bindableConfiguration);

            foreach (var item in mapped)
            {
                item.Value.Source(bindableConfiguration.DestinationProperties);
                bindableConfiguration.SourceResolverContainer(item.Key, item.Value);
            }
        }
예제 #6
0
        public static IDictionary<Type, PrioritizedComposedFirstMatchingResolverContainer> ToResolverContainer(BindableConfiguration bindableConfiguration)
        {
            var dic = new Dictionary<Type, PrioritizedComposedFirstMatchingResolverContainer>();
            foreach (var sourceContext in bindableConfiguration.SourceContexts)
            {
                var copy = sourceContext;
                var sourcedConventions = new PrioritizedComposedFirstMatchingResolverContainer(
                    bindableConfiguration.SourcedConventions.Where(its => its.SourceType == copy.SourceType).ToArray());

                dic[sourceContext.SourceType]=new PrioritizedComposedFirstMatchingResolverContainer(new IContainResolvers[]{copy, sourcedConventions});

            }
            return dic;
        }
        public void Bind(BindableConfiguration bindableConfiguration,params ICreateExecutableMapping[] configurations)
        {
            if (configurations == null || configurations.Length == 0)
                return;

            var children = configurations.ToDictionary(k => new ConfigurationPropertyCriterion(k), v => v);
            foreach (var childCfg in children)
            {
                KeyValuePair<ConfigurationPropertyCriterion, ICreateExecutableMapping> cfg = childCfg;
                foreach (var destinationProperty in bindableConfiguration.DestinationProperties.Where(destProp => cfg.Key.IsSatisfiedBy(destProp)))
                {
                    var copy = destinationProperty;
                    foreach (var sourceContext in bindableConfiguration.SourceContexts.Where(sourceContext => sourceContext.RequiresComponentConfigurationFor(copy)))
                    {
                        Logger.Create(this).Debug("Extending configuration on '{0}' from '{1}' for property '{2}'", bindableConfiguration.DestinationType, childCfg.Value.DestinationType, copy.Name);
                        var resolverContext = new ResolverContext(sourceContext.CreateProperty(destinationProperty), destinationProperty, childCfg.Value);
                        if(sourceContext.TrySetResolver(destinationProperty, resolvers.CreateRedirectingConfigurationResolver(resolverContext))==false)
                        {
                            Logger.Create(this).Info("{0} will not be overriden on {1} using {2}", destinationProperty, sourceContext, resolverContext);
                        }
                    }
                }
            }
        }
예제 #8
0
 public IEnumerable<IDescribeMappableProperty> GetCandidateDestinationProperties(BindableConfiguration bindableConfiguration)
 {
     return bindableConfiguration.DestinationProperties
         .Where(property => new ListPropertyCriterion().IsSatisfiedBy(property)).ToArray();
 }
예제 #9
0
 public IEnumerable <IDescribeMappableProperty> GetCandidateDestinationProperties(BindableConfiguration bindableConfiguration)
 {
     return(bindableConfiguration.DestinationProperties
            .Where(property => new ListPropertyCriterion().IsSatisfiedBy(property)).ToArray());
 }
예제 #10
0
 public void Bind(BindableConfiguration bindableConfiguration, params ICreateExecutableMapping[] configurations)
 {
     bindableConfiguration.Bind(configurations);
 }
예제 #11
0
        public static IDictionary <Type, PrioritizedComposedFirstMatchingResolverContainer> ToResolverContainer(BindableConfiguration bindableConfiguration)
        {
            var dic = new Dictionary <Type, PrioritizedComposedFirstMatchingResolverContainer>();

            foreach (var sourceContext in bindableConfiguration.SourceContexts)
            {
                var copy = sourceContext;
                var sourcedConventions = new PrioritizedComposedFirstMatchingResolverContainer(
                    bindableConfiguration.SourcedConventions.Where(its => its.SourceType == copy.SourceType).ToArray());

                dic[sourceContext.SourceType] = new PrioritizedComposedFirstMatchingResolverContainer(new IContainResolvers[] { copy, sourcedConventions });
            }
            return(dic);
        }
예제 #12
0
 public void Bind(BindableConfiguration bindableConfiguration, params ICreateExecutableMapping[] configurations)
 {
     bindableConfiguration.Bind(configurations);
 }