Пример #1
0
        /// <summary>
        /// <inheritdoc/>
        /// </summary>
        public void AddIgnoredMember(string propertyName)
        {
            CheckValue.NotNullOrEmpty(propertyName, nameof(propertyName));

            if (_ignoredMembers.Contains(propertyName))
                return;

            _ignoredMembers.Add(propertyName);
        }
Пример #2
0
        public IConventionStoreEntityBuilder AddIgnoredMember(string propertyName)
        {
            CheckValue.NotNullOrEmpty(propertyName, nameof(propertyName));

            if (_clrType.GetMembersInHierarchy(propertyName).Count() == 0)
            {
                throw new ArgumentException($"The property name '{propertyName}' is not belong to {_clrType.Name}");
            }
            Metadata.AddIgnoredMember(propertyName);

            return(this);
        }
Пример #3
0
        private Type CreateCustomEmitType(CustomWrapperModel customWrapperModel)
        {
            var dyClass = EmitHelper.CreateClass(customWrapperModel.ModelName,
                                                 MiCakeReflectionPredefined.DynamicAssembly,
                                                 MiCakeReflectionPredefined.DynamicModule,
                                                 baseType: typeof(BaseResultDataWrapper));

            foreach (var customerProperty in customWrapperModel.GetAllConfigProperties())
            {
                CheckValue.NotNullOrEmpty(customerProperty.Key, nameof(customerProperty.Key));
                EmitHelper.CreateProperty(dyClass, customerProperty.Key, typeof(object));
            }

            return(dyClass.CreateType());
        }
Пример #4
0
        /// <summary>
        /// Creating a basic class(has no properties or fields or methods).
        /// </summary>
        /// <param name="className">Created class name</param>
        /// <param name="assemblyName"></param>
        /// <param name="moduleName"></param>
        /// <param name="typeAttributes"></param>
        /// <param name="baseType"></param>
        /// <returns><see cref="TypeBuilder"/></returns>
        public static TypeBuilder CreateClass(string className,
                                              string assemblyName           = "",
                                              string moduleName             = "",
                                              TypeAttributes typeAttributes = TypeAttributes.Public,
                                              Type baseType = null)
        {
            CheckValue.NotNullOrEmpty(className, nameof(className));

            var asmNameStr    = string.IsNullOrEmpty(assemblyName) ? MiCakeDynamicAssemblyName : assemblyName;
            var moduleNameStr = string.IsNullOrEmpty(moduleName) ? MiCakeDynamicModuleName : moduleName;

            var asmName       = new AssemblyName(asmNameStr);
            var builder       = AssemblyBuilder.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Run);
            var moduleBuilder = builder.DefineDynamicModule(moduleNameStr);

            return(moduleBuilder.DefineType(className, typeAttributes, baseType));;
        }
Пример #5
0
        public StoreProperty(string name,
                             Type propertyType,
                             PropertyInfo propertyInfo,
                             FieldInfo fieldInfo,
                             MemberInfo memberInfo,
                             StoreEntityType storeEntityType)
        {
            CheckValue.NotNullOrEmpty(name, nameof(name));
            CheckValue.NotNull(propertyType, nameof(propertyType));
            CheckValue.NotNull(storeEntityType, nameof(storeEntityType));

            Name             = name;
            _clrPropertyType = propertyType;
            _clrPropertyInfo = propertyInfo;
            _clrFieldInfo    = fieldInfo;
            _clrMemberInfo   = memberInfo;
            _originalEntity  = storeEntityType;

            Builder = new InternalStorePropertyBuilder(this);
        }
Пример #6
0
        public InternalStorePropertyBuilder AddProperty(string propertyName, MemberInfo memberInfo)
        {
            CheckValue.NotNullOrEmpty(propertyName, nameof(propertyName));

            var existedProperty = Metadata.FindProperty(propertyName);

            if (existedProperty != null)
            {
                return(((StoreProperty)existedProperty).Builder);
            }

            if (memberInfo == null)
            {
                var clrMember = Metadata.ClrType.GetMembersInHierarchy(propertyName).FirstOrDefault()
                                ?? throw new InvalidOperationException($"The property '{propertyName}' cannot be added to the type '{Metadata.ClrType.Name}' " +
                                                                       $"because there was no property type specified and there is no corresponding CLR property or field.");

                memberInfo = clrMember;
            }

            return(Metadata.AddProperty(propertyName, memberInfo).Builder);
        }
Пример #7
0
        /// <summary>
        /// Create property in the current <see cref="TypeBuilder"/>
        /// </summary>
        /// <param name="typeBuilder"><see cref="TypeBuilder"/></param>
        /// <param name="propertyName">The name of the property to be created</param>
        /// <param name="propertyType">The type of the property to be created</param>
        /// <returns>orignal <see cref="TypeBuilder"/></returns>
        public static TypeBuilder CreateProperty(
            TypeBuilder typeBuilder,
            string propertyName,
            Type propertyType)
        {
            CheckValue.NotNull(typeBuilder, nameof(typeBuilder));
            CheckValue.NotNullOrEmpty(propertyName, nameof(propertyName));
            CheckValue.NotNull(propertyType, nameof(propertyType));

            //filed info
            var fieldInfo = typeBuilder.DefineField($"_{propertyName.ToLower()}", propertyType, FieldAttributes.Private);

            //method info
            var getMethod = typeBuilder.DefineMethod($"get_{propertyName}", MethodAttributes.Public, propertyType, null);
            var setMethod = typeBuilder.DefineMethod($"set_{propertyName}", MethodAttributes.Public, null, new Type[] { propertyType });

            var ilOfGet = getMethod.GetILGenerator();

            ilOfGet.LdArg(0); //arguement : this
            ilOfGet.Emit(OpCodes.Ldfld, fieldInfo);
            ilOfGet.Return();

            var ilOfSet = setMethod.GetILGenerator();

            ilOfSet.PushParameters(true, 2); //arguements : 1:this 2:value
            ilOfSet.Emit(OpCodes.Stfld, fieldInfo);
            ilOfSet.Return();

            //property
            var propertyBuilde = typeBuilder.DefineProperty(propertyName, PropertyAttributes.None, propertyType, null);

            propertyBuilde.SetGetMethod(getMethod);
            propertyBuilde.SetSetMethod(setMethod);

            return(typeBuilder);
        }
Пример #8
0
        public void SetModelName(string modelName)
        {
            CheckValue.NotNullOrEmpty(modelName, nameof(modelName));

            _modelName = modelName;
        }
Пример #9
0
        public CustomWrapperModel(string modelName) : this()
        {
            CheckValue.NotNullOrEmpty(modelName, nameof(modelName));

            _modelName = modelName;
        }
Пример #10
0
 /// <summary>
 /// 根据传入的电话号码获取AccessToken Url
 /// </summary>
 public static string GetAccessUrl(string phone)
 {
     CheckValue.NotNullOrEmpty(phone, nameof(phone));
     return(string.Format(AccessTokenUrl, phone));
 }