static MethodBuilder CreateNewInstanceGetter(TypeBuilder typeBuilder, PropertyBuilder property, ConstructorInfo constructor, MethodAttributes accessRights) { var getterMethod = CodeGenerationUtils.GetterMethodFor(typeBuilder, property, accessRights); CodeGenerationUtils.ReturnNewInstanceILInstructions(constructor, getterMethod); return(getterMethod); }
private static void AddLabelProperty(TypeBuilder typeBuilder, string propertyName, string valueToReturn) { var property = CodeGenerationUtils.DefineProperty(typeBuilder, propertyName, typeof(string)); var methodBuilder = CodeGenerationUtils.GetterMethodFor(typeBuilder, property, CodeGenerationUtils.PublicGetter()); var ilCode = methodBuilder.GetILGenerator(); ilCode.Emit(OpCodes.Ldstr, valueToReturn); ilCode.Emit(OpCodes.Ret); }
private void CreateEntries(ByNameGrouping type) { foreach (var typeToBuildFor in type.Members) { var definePropertyOn = FindLocationForProperty(type, typeToBuildFor.Key); var querableType = propertyTypeBuilder(typeToBuildFor.Value, typeToBuildFor.Key); var nameOfProperty = NameOfProperty(typeToBuildFor.Key); var property = CodeGenerationUtils.DefineProperty(definePropertyOn, nameOfProperty, querableType); var getterMethod = CodeGenerationUtils.GetterMethodFor(definePropertyOn, property, QueryPropertyAccessRights(definePropertyOn)); buildPropertyOnType(getterMethod, typeToBuildFor.Value, typeToBuildFor.Key); } }
private void CreateMetaDataStructure(IEnumerable <ByNameGrouping> typesGroupesByName) { var metaInfoType = CreateMetaInfoProperty(typesGroupesByName); var constructorOfMetaInfoType = metaInfoType.GetConstructors().Single(); var property = CodeGenerationUtils.DefineProperty(rootType, MetaDataProperty, metaInfoType); var getterMethod = CodeGenerationUtils.GetterMethodFor(rootType, property, CodeGenerationUtils.StaticPublicGetter()); var lambda = Expression.Lambda(typeof(Func <>).MakeGenericType(metaInfoType), Expression.New(constructorOfMetaInfoType), new ParameterExpression[0]); lambda.CompileToMethod(getterMethod); }