private static void addCtors(TypeInfo type, CodeTypeReference typeRef, CodeFieldReferenceExpression this_underlyingObject, CodeTypeDeclaration wrap) { var ctors = type.GetConstructors(BindingFlags.Public | BindingFlags.Instance | BindingFlags.CreateInstance); foreach (var c in ctors) { var ctor = new CodeConstructor(); ctor.Attributes = MemberAttributes.Public; foreach (var p in c.GetParameters()) { var param = new CodeParameterDeclarationExpression(new CodeTypeReference(p.ParameterType), p.Name); ctor.Parameters.Add(param); } var create = new CodeObjectCreateExpression(typeRef, ctor.Parameters.Cast<CodeParameterDeclarationExpression>().Select(x => new CodeVariableReferenceExpression(x.Name)).ToArray()); var wrapped = new CodeAssignStatement(this_underlyingObject, create); ctor.Statements.Add(wrapped); wrap.Members.Add(ctor); } }