protected void GenerateConstructors(ClassEmitter emitter, Type baseType, params FieldReference[] fields) { var constructors = baseType.GetConstructors(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); var ctorGenerationHook = (ProxyGenerationOptions.Hook as IConstructorGenerationHook) ?? AllMethodsHook.Instance; bool defaultCtorConsidered = false; foreach (var constructor in constructors) { if (constructor.GetParameters().Length == 0) { defaultCtorConsidered = true; } bool ctorVisible = IsConstructorVisible(constructor); var analysis = new ConstructorImplementationAnalysis(ctorVisible); var impl = ctorGenerationHook.GetConstructorImplementation(constructor, analysis); GenerateConstructor(emitter, constructor, impl, fields); } if (!defaultCtorConsidered) { GenerateConstructor(emitter, null, ctorGenerationHook.DefaultConstructorImplementation, fields); } }
public ProxyConstructorImplementation GetConstructorImplementation(ConstructorInfo constructorInfo, ConstructorImplementationAnalysis analysis) { return(myMockConstructors ? ProxyConstructorImplementation.DoNotCallBase : analysis.IsBaseVisible?ProxyConstructorImplementation.CallBase : ProxyConstructorImplementation.SkipConstructor); }
protected void GenerateConstructors(ClassEmitter emitter, Type baseType, params FieldReference[] fields) { var constructors = baseType.GetConstructors(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); var ctorGenerationHook = (ProxyGenerationOptions.Hook as IConstructorGenerationHook) ?? AllMethodsHook.Instance; bool defaultCtorConsidered = false; foreach (var constructor in constructors) { if (constructor.GetParameters().Length == 0) defaultCtorConsidered = true; bool ctorVisible = IsConstructorVisible(constructor); var analysis = new ConstructorImplementationAnalysis(ctorVisible); var impl = ctorGenerationHook.GetConstructorImplementation(constructor, analysis); GenerateConstructor(emitter, constructor, impl, fields); } if (!defaultCtorConsidered) { GenerateConstructor(emitter, null, ctorGenerationHook.DefaultConstructorImplementation, fields); } }