コード例 #1
0
        public void nullable_type_found_by_underlying_type()
        {
            var collection = new DependencyCollection();

            collection.Add("foo", 1);
            collection.Add("bar", 1.1m);

            collection.FindByTypeAndName(typeof(int?), "foo")
            .ShouldBe(1);

            collection.FindByTypeAndName(typeof(int?), "bar")
            .ShouldBeNull();
        }
コード例 #2
0
        public static ConstructorStep BuildConstructorStep(Type pluggedType, ConstructorInfo constructor,
                                                           DependencyCollection dependencies, Policies policies)
        {
            var ctor = constructor ?? policies.SelectConstructor(pluggedType, dependencies);

            if (ctor == null)
            {
                throw new StructureMapConfigurationException(
                          "No public constructor could be selected for concrete type " + pluggedType.GetFullName());
            }

            var ctorStep  = new ConstructorStep(ctor);
            var multiples = findTypesWithMultipleParametersRequired(ctor);

            var ctorDependencies = ctor
                                   .GetParameters()
                                   .Select(x => {
                var dependency = multiples.Contains(x.ParameterType)
                        ? dependencies.FindByTypeAndName(x.ParameterType, x.Name)
                        : dependencies.FindByTypeOrName(x.ParameterType, x.Name);

                if (dependency == null && ((x.DefaultValue != null && x.DefaultValue.GetType().Name != "DBNull")))
                {
                    dependency = x.DefaultValue;
                }

                return(SourceFor(ConstructorArgument, x.Name, x.ParameterType, dependency));
            });

            ctorStep.Add(ctorDependencies);

            return(ctorStep);
        }
コード例 #3
0
        public static ConstructorStep BuildConstructorStep(Type pluggedType, ConstructorInfo constructor,
            DependencyCollection dependencies, Policies policies)
        {
            var ctor = constructor ?? policies.SelectConstructor(pluggedType);
            if (ctor == null)
            {
                throw new StructureMapConfigurationException(
                    "No public constructor could be selected for concrete type " + pluggedType.GetFullName());
            }

            var ctorStep = new ConstructorStep(ctor);
            var multiples = findTypesWithMultipleParametersRequired(ctor);

            var ctorDependencies = ctor
                .GetParameters()
                .Select(x => {
                    var dependency = multiples.Contains(x.ParameterType)
                        ? dependencies.FindByTypeAndName(x.ParameterType, x.Name)
                        : dependencies.FindByTypeOrName(x.ParameterType, x.Name);

                    if (dependency == null && ( (x.DefaultValue != null && x.DefaultValue.GetType().Name != "DBNull")))
                    {
                        dependency = x.DefaultValue;
                    }

                    return SourceFor(ConstructorArgument, x.Name, x.ParameterType, dependency);
                });

            ctorStep.Add(ctorDependencies);

            return ctorStep;
        }
コード例 #4
0
        private static void determineSetterSource(DependencyCollection dependencies, Policies policies,
                                                  PropertyInfo setter,
                                                  IHasSetters plan)
        {
            var isMandatory = policies.IsMandatorySetter(setter);

            object dependency = null;

            if (setter.PropertyType.IsSimple() && !isMandatory)
            {
                dependency = dependencies.FindByTypeAndName(setter.PropertyType, setter.Name);
            }
            else
            {
                dependency = dependencies.FindByTypeOrName(setter.PropertyType, setter.Name);
            }

            if (dependency == null && !isMandatory)
            {
                return;
            }

            var source = SourceFor(SetterProperty, setter.Name, setter.PropertyType, dependency);

            plan.Add(setter.PropertyType, setter, source);
        }
コード例 #5
0
ファイル: ConcreteType.cs プロジェクト: goraw/structuremap
        private static void determineSetterSource(DependencyCollection dependencies, Policies policies,
            PropertyInfo setter,
            IHasSetters plan)
        {
            var isMandatory = policies.IsMandatorySetter(setter);

            object dependency = null;
            if (setter.PropertyType.IsSimple() && !isMandatory)
            {
                dependency = dependencies.FindByTypeAndName(setter.PropertyType, setter.Name);
            }
            else
            {
                dependency = dependencies.FindByTypeOrName(setter.PropertyType, setter.Name);
            }

            if (dependency == null && !isMandatory) return;

            var source = SourceFor(SetterProperty, setter.Name, setter.PropertyType, dependency);
            plan.Add(setter.PropertyType, setter, source);
        }