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); }
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()); }