示例#1
0
        private static PropertyAccessItem CreatePropertyAccessItem(Type objectType, PropertyInfo propertyInfo)
        {
            PropertyAccessItem propertyAccessItem = new PropertyAccessItem();

            if (propertyInfo.CanRead)
            {
                propertyAccessItem.Getter = DynamicMethodCompiler.CreateGetHandler(objectType, propertyInfo);
            }
            if (propertyInfo.CanWrite)
            {
                propertyAccessItem.Setter = DynamicMethodCompiler.CreateSetHandler(objectType, propertyInfo);
            }
            return(propertyAccessItem);
        }
示例#2
0
        public static object CreateInstance(Type type)
        {
            ConstructorInfo constructorInfo = type.GetConstructor(Constants.CONSTRUCTOR_INFO_BINDING_FLAGS, null, Type.EmptyTypes, null);

            InstantiateObjectHandler createHandler;

            if (!s_CreateInstanceCache.TryGetValue(constructorInfo, out createHandler))
            {
                lock (s_CreateInstanceCache)
                {
                    createHandler = DynamicMethodCompiler.CreateInstantiateObjectHandler(type, constructorInfo);
                    s_CreateInstanceCache.Add(constructorInfo, createHandler);
                }
            }

            return(createHandler.Invoke());
        }