예제 #1
0
        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);
        }
예제 #4
0
        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));
        }
예제 #5
0
        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);
            }
        }
예제 #6
0
        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));
                    }
                }
            }
        }
예제 #7
0
        /// <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);
            }
        }