public override void Generate(GeneratorTypeContext context) { GenerateInit(context); var classType = context.ClassType; var typeBuilder = context.TypeBuilder; bool hasClassIntercept = classType.HasInterceptAttribute(); foreach (var ctor in classType.GetConstructors( BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic ).Where( x => x.IsPublic || x.IsFamily || !(x.IsAssembly || x.IsFamilyAndAssembly || x.IsFamilyOrAssembly) )) { var baseParameterInfos = ctor.GetParameters(); var parameters = baseParameterInfos .Select(x => x.ParameterType) .ToArray(); // 定义构造函数 ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor( MethodAttributes.Public, CallingConventions.HasThis, parameters ); bool isIntercept = true; if (ctor.IsDefined(typeof(NonInterceptAttribute))) { isIntercept = false; } if (!ctor.HasDefineInterceptAttribute() && !hasClassIntercept) { isIntercept = false; } constructorBuilder.SetMethodParameters(baseParameterInfos); ILGenerator ctorGenerator = constructorBuilder.GetILGenerator(); GeneratorConstructor( constructorBuilder, ctor, ctorGenerator, context, baseParameterInfos, isIntercept ); } if (context.InterfaceType != null && context.ClassType.IsValueType) { ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor( MethodAttributes.Public, CallingConventions.HasThis, null ); ILGenerator ctorGenerator = constructorBuilder.GetILGenerator(); GeneratorConstructor( constructorBuilder, null, ctorGenerator, context, null, false ); } }