protected override void InitializeConstructors() { var parameters = InitializeConstructorParameters(); var constructor = new ConstructorMetadata(parameters); Constructors.Add(constructor); }
private static void DefineParameterNames( ConstructorBuilder constructor, ConstructorMetadata constructorMetadata) { for (var i = 0; i < constructorMetadata.Parameters.Length; i++) { var parameter = constructorMetadata.Parameters[i]; constructor.DefineParameter(parameter.Sequence, ParameterAttributes.None, parameter.Name); } }
private static void GenerateBaseConstructorCall(ILGenerator il, ConstructorMetadata constructorMetadata) { il.Emit(OpCodes.Ldarg_0); for (var i = 0; i < constructorMetadata.Parameters.Length; i++) { var parameter = constructorMetadata.Parameters[i] as ConstructorBaseParameterMetadata; if (parameter != null) { new LoadArgumentExpression(parameter.Sequence).Emit(il); } } il.Emit(OpCodes.Call, constructorMetadata.ConstructorInfo); }
public TypeMetadata( string name, Type baseType, Type[] interfaces, DispatcherFieldMetadata dispatcherField, FieldMetadata[] fields, ConstructorMetadata[] constructors, MethodMetadata[] methods, PropertyMetadata[] properties, EventMetadata[] events, TargetMetadata[] targets) { _name = name; _baseType = baseType; _interfaces = interfaces; _dispatcherField = dispatcherField; _fields = fields; _constructors = constructors; _methods = methods; _properties = properties; _events = events; _targets = targets; }
private static void GenerateConstructor( TypeBuilder typeBuilder, TypeMetadata typeMetadata, ConstructorMetadata constructorMetadata, FieldMetadataFieldBuilderMap fieldBuilders) { var constructor = typeBuilder.DefineConstructor( constructorMetadata.MethodAttributes, CallingConventions.Standard, constructorMetadata.ParameterTypes); DefineParameterNames(constructor, constructorMetadata); var il = constructor.GetILGenerator(); InitializeInstanceFields(il, typeMetadata, constructorMetadata, fieldBuilders); if (constructorMetadata.CallBaseConstructor) { GenerateBaseConstructorCall(il, constructorMetadata); } il.Emit(OpCodes.Ret); }
protected virtual void InitializeDefaultConstructor() { var dispatcherParameter = new ConstructorDispatcherParameterMetadata(1, _dispatcherField); var parameters = new [] { dispatcherParameter }; var constructor = new ConstructorMetadata(parameters); _constructors.Add(constructor); }
private static void InitializeInstanceFields( ILGenerator il, TypeMetadata typeMetadata, ConstructorMetadata constructorMetadata, FieldMetadataFieldBuilderMap fieldBuilders) { for (var i = 0; i < constructorMetadata.Parameters.Length; i++) { var parameter = constructorMetadata.Parameters[i]; var dispatcherParameter = parameter as ConstructorDispatcherParameterMetadata; var targetParameter = parameter as ConstructorTargetParameterMetadata; if (dispatcherParameter != null) { InitializeField(il, dispatcherParameter.InstanceField, dispatcherParameter, fieldBuilders); } else if(targetParameter != null) { InitializeField(il, targetParameter.InstanceField, targetParameter, fieldBuilders); } } for (var i = 0; i < typeMetadata.Targets.Length; i++) { var target = typeMetadata.Targets[i]; if (target.IsProxyInstantiated) { InitializeTarget(il, target.InstanceField, target.TargetType, fieldBuilders); } } }