public void NoDecoratedProperties() { MockBuilderContext context = new MockBuilderContext(); PropertyReflectionStrategy strategy = new PropertyReflectionStrategy(); strategy.BuildUp(context, typeof(object), null); IPropertySetterPolicy policy = context.Policies.Get <IPropertySetterPolicy>(typeof(object)); Assert.Null(policy); }
/// <summary> /// Called during the chain of responsibility for a build operation. Looks for the <see cref="IPropertySetterPolicy"/> and /// sets the value for the property if found. /// </summary> /// <param name="context">The context for the operation.</param> public override void PreBuildUp(IBuilderContext context) { IPropertySetterPolicy policy = context.Policies.Get <IPropertySetterPolicy>(context.BuildKey); if (context.Existing != null && policy != null) { foreach (IPropertySetterInfo property in policy.Properties) { property.Set(context, context.Existing, context.BuildKey); } } }
public void NoDecoratedProperties() { MockBuilderContext context = new MockBuilderContext(); PropertyReflectionStrategy <DependencyAttribute> strategy = new PropertyReflectionStrategy <DependencyAttribute>(); context.Strategies.Add(strategy); context.ExecuteBuildUp(typeof(object), null); IPropertySetterPolicy policy = context.Policies.Get <IPropertySetterPolicy>(typeof(object)); Assert.IsNull(policy); }
public override object BuildUp(IBuilderContext context, object buildKey, object existing) { IPropertySetterPolicy policy = context.Policies.Get <IPropertySetterPolicy>(buildKey); if (existing != null && policy != null) { foreach (IPropertySetterInfo property in policy.Properties) { property.Set(context, existing, buildKey); } } return(base.BuildUp(context, buildKey, existing)); }
public void DecoratedProperty() { MockBuilderContext context = new MockBuilderContext(); PropertyReflectionStrategy strategy = new PropertyReflectionStrategy(); strategy.BuildUp(context, typeof(Decorated), null); IPropertySetterPolicy policy = context.Policies.Get <IPropertySetterPolicy>(typeof(Decorated)); Assert.NotNull(policy); Assert.NotEmpty(policy.Properties); foreach (ReflectionPropertySetterInfo property in policy.Properties) { Assert.Equal(typeof(Decorated).GetProperty("Property"), property.Property); } }
private void InjectProperties(IBuilderContext context, object obj, string id) { if (obj == null) { return; } Type type = obj.GetType(); IPropertySetterPolicy policy = context.Policies.Get <IPropertySetterPolicy>(type, id); if (policy == null) { return; } foreach (IPropertySetterInfo propSetterInfo in policy.Properties.Values) { PropertyInfo propInfo = propSetterInfo.SelectProperty(context, type, id); if (propInfo != null) { if (propInfo.CanWrite) { object value = propSetterInfo.GetValue(context, type, id, propInfo); if (value != null) { Guard.TypeIsAssignableFromType(propInfo.PropertyType, value.GetType(), obj.GetType()); } if (TraceEnabled(context)) { TraceBuildUp(context, type, id, Properties.Resources.CallingProperty, propInfo.Name, propInfo.PropertyType.Name); } propInfo.SetValue(obj, value, null); } else { throw new ArgumentException(String.Format( CultureInfo.CurrentCulture, Properties.Resources.CannotInjectReadOnlyProperty, type, propInfo.Name)); } } } }
/// <summary> /// Adds <paramref name="parameters"/> to the appropriate policy. /// </summary> /// <param name="context">The build context.</param> /// <param name="member">The member that's being reflected over.</param> /// <param name="parameters">The parameters used to satisfy the method.</param> protected override void AddParametersToPolicy(IBuilderContext context, IMemberInfo <PropertyInfo> member, IEnumerable <IParameter> parameters) { IPropertySetterPolicy result = context.Policies.Get <IPropertySetterPolicy>(context.BuildKey); if (result == null) { result = new PropertySetterPolicy(); context.Policies.Set(result, context.BuildKey); } foreach (IParameter parameter in parameters) { result.Properties.Add(new ReflectionPropertySetterInfo(member.MemberInfo, parameter)); } }
public void DecoratedProperty() { MockBuilderContext context = new MockBuilderContext(); PropertyReflectionStrategy <DependencyAttribute> strategy = new PropertyReflectionStrategy <DependencyAttribute>(); context.Strategies.Add(strategy); context.ExecuteBuildUp(typeof(Decorated), null); IPropertySetterPolicy policy = context.Policies.Get <IPropertySetterPolicy>(typeof(Decorated)); Assert.IsNotNull(policy); AssertHelper.NotEmpty(policy.Properties); foreach (ReflectionPropertySetterInfo property in policy.Properties) { Assert.AreEqual(typeof(Decorated).GetProperty("Property"), property.Property); } }