Пример #1
0
        /// <summary>
        /// Creates a constructor for a generated class. The constructor will call Init on the Logic classes.
        /// </summary>
        /// <param name="fieldsToInit"></param>
        /// <param name="generatedTypeBuilder"></param>
        /// <param name="entityBase"></param>
        private void CreateConstructorLogic(IEnumerable<FieldBuilder> fieldsToInit, TypeBuilderHelper generatedTypeBuilder, Type entityBase)
        {
            //define public constructor
            var constructor = generatedTypeBuilder.DefinePublicConstructor().Emitter;

            //call base()
            constructor = constructor
                .ldarg_0
                .call(entityBase.GetConstructor(new Type[] {}));

            //initialize all fields
            foreach (var fieldBuilder in fieldsToInit)
            {
                constructor
                    .ldarg_0
                    .newobj(fieldBuilder.FieldType)
                    .stfld(fieldBuilder)
                    .ldarg_0
                    .ldfld(fieldBuilder)
                    .ldarg_0
                    .callvirt(typeof (LogicBase<>).MakeGenericType(fieldBuilder.FieldType).GetMethod("set_CurrentInstance"));
            }

            //exit constructor
            constructor.ret();
        }
Пример #2
0
		private static ConstructorBuilderHelper BuildNestedTypeConstructor(TypeBuilderHelper nestedType)
		{
			Type[] parameters = { typeof(TypeAccessor), typeof(MemberInfo) };

			ConstructorBuilderHelper ctorBuilder = nestedType.DefinePublicConstructor(parameters);

			ctorBuilder.Emitter
				.ldarg_0
				.ldarg_1
				.ldarg_2
				.call    (TypeHelper.GetConstructor(typeof(MemberAccessor), parameters))
				.ret()
				;

			return ctorBuilder;
		}