//out 参数赋值 internal string WriteOutParaAssign(IT4Template writer, string outErrPara) { if (ResCase != ParaCaseType.WrapOut) { return(null); } var tag = 1; writer.Write(" "); foreach (var p in FormOfParas(true)) { writer.Write($"{p.Name} = _res_.P{++tag}; "); //From Response } writer.WriteLine(string.Empty); //onException return(string.Join(" ", FormOfParas(true).Select(p => $"{p.Name} = {(p.Name == outErrPara ? "e.Message" : "default")};"))); }
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; } }
public static void EndSubWrite(this IT4Template writer) { writer.PopIndent(); writer.WriteLine("}"); }
public static void BeginSubWrite(this IT4Template writer) { writer.WriteLine("{"); writer.PushIndent(" "); }