internal void DefineMsgType(IT4Template writer) { #region Req参数 var reqParas = Parameters.Separate(x => !x.IsOut, out var outParas); if (reqParas.Count == 0) { ProxyReqTypeName = $"{Var_MsgWrp}"; ParaCase = ParaCaseType.No; } else if (reqParas.Count == 1) { var pt = reqParas[0].ParameterType; if (pt.IsClass()) { ParaCase = ParaCaseType.OneRaw; ProxyReqTypeName = GetTypeName(pt); } } //包裹参数 if (WrappedPara) { if (reqParas.Count <= MsgGenCount) { ProxyReqTypeName = $"{Var_MsgWrp}<{JoinParaType(reqParas)}>"; } else //参数过多,构造类型 { ProxyReqTypeName = Name + "_Para"; //Type define writer.WriteLine("[DataContract]"); writer.WriteLine($"internal class {ProxyReqTypeName}"); writer.BeginSubWrite(); var tag = 0; foreach (var para in reqParas) { writer.WriteLine($"[DataMember(Order = {++tag})]"); writer.WriteLine($"public {GetParaType(para)} P{tag} {{ get; set; }}"); } writer.EndSubWrite(); writer.WriteLine(null); } } #endregion //---Res 对象 if (IsVoidReturn) { ProxyResTypeName = Var_MsgWrp; } else if (outParas.IsNullOrEmpty()) { if (ReturnType.IsClass && ReturnType.GetInterface("IGeneralResObj") != null) { ResCase = ParaCaseType.OneRaw; } ProxyResTypeName = ResCase == ParaCaseType.OneRaw ? GetTypeName(ReturnType) : $"{Var_MsgWrp}<{GetTypeName(ReturnType)}>"; } else //带out的多返回 { if (outParas.Count >= MsgGenCount) { throw new Exception($"{RawInterface}.{MethodInfo.Name}Out参数过多,无法Wrap"); } ProxyResTypeName = $"{Var_MsgWrp}<{GetTypeName(ReturnType)}, {JoinParaType(outParas)}>"; ResCase = ParaCaseType.WrapOut; } }