Ejemplo n.º 1
0
        /// <summary>
        ///     Inject a new property into a type
        /// </summary>
        /// <param name="type"></param>
        /// <param name="name"></param>
        /// <param name="propertyType"></param>
        /// <returns></returns>
        public static Type InjectProperty(this Type type, string name, Type propertyType)
        {
            type = type.AddParameterlessConstructor();
            var moduleBuilder = ModuleBuilder();
            var typeBuilder   = moduleBuilder.DefineType(type.Name + ".propertyInjected", TypeAttributes.Public, type);

            name.CreateProperty(typeBuilder, propertyType);
            return(typeBuilder.CreateTypeInfo().AsType());
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     Injects the property attributes.
        /// </summary>
        /// <param name="type">The type.</param>
        /// <param name="propInfo">The property information.</param>
        /// <param name="expressions">The expressions.</param>
        /// <returns></returns>
        public static Type InjectPropertyAttributes(this Type type, PropertyInfo propInfo,
                                                    params Expression <Func <Attribute> >[] expressions)
        {
            type = type.AddParameterlessConstructor();
            var moduleBuilder    = ModuleBuilder();
            var typeBuilder      = moduleBuilder.DefineType(type.Name + ".proxied", TypeAttributes.Public, type);
            var custNamePropBldr = propInfo.Name.CreateProperty(typeBuilder, propInfo.PropertyType);

            foreach (var expression in expressions)
            {
                custNamePropBldr.SetCustomAttribute(expression);
            }
            return(typeBuilder.CreateTypeInfo().AsType());
        }