public static void AssembleProperties( object instance, IComponentModel model, object key, ResolveTypeHandler resolver ) { AssertUtil.ArgumentNotNull( model, "model" ); AssertUtil.ArgumentNotNull( resolver, "resolver" ); foreach( PropertyInfo property in model.ConstructionModel.SelectedProperties ) { Type service = property.PropertyType; String propertyName = property.Name; object value = Resolve( model, service, propertyName, key, resolver ); if (value != null) { property.SetValue( instance, value, null ); } } }
/// <summary> /// /// </summary> /// <param name="model"></param> /// <param name="resolver"></param> /// <returns></returns> public static object[] BuildConstructorArguments( IComponentModel model, object key, ResolveTypeHandler resolver ) { AssertUtil.ArgumentNotNull( model, "model" ); AssertUtil.ArgumentNotNull( resolver, "resolver" ); ParameterInfo[] parameters = model.ConstructionModel.SelectedConstructor.GetParameters(); object[] args = new object[ parameters.Length ]; for(int i=0; i < args.Length; i++) { ParameterInfo parameter = parameters[i]; Type service = parameter.ParameterType; String argumentName = parameter.Name; object value = Resolve( model, service, argumentName, key, resolver ); args[ parameter.Position ] = value; } return args; }
/// <summary> /// /// </summary> /// <param name="model"></param> /// <param name="type"></param> /// <param name="argumentOrPropertyName"></param> /// <param name="resolver"></param> /// <returns></returns> private static object Resolve( IComponentModel model, Type type, String argumentOrPropertyName, object key, ResolveTypeHandler resolver ) { if (IsLogger( type )) { return model.Logger; } if (IsContext( type )) { return model.Context; } if (IsConfiguration( type )) { return model.Configuration; } object value = null; resolver( model, type, argumentOrPropertyName, key, out value ); return value; }