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(); }
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); }
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; }
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); }
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); }