//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")};"))); }
/// <summary> /// 输出代码文件 /// </summary> internal async Task WriteFile(IT4Template template, GrpcBuildConfig conf) { using (var writer = new CodeWriter(FilePath)) { template.Session = new Dictionary <string, object> { ["config"] = conf, ["file"] = this }; template.Initialize(); await writer.WriteAsync(template.TransformText()); } /*writer.WriteLine(UsingSection); * //writer.WriteLine("namespace {0}", NameSpace); * writer.BeginSubWrite(); * foreach (var dotNetType in TypeList) * { * dotNetType.RenderCode(writer); * } * writer.EndSubWrite(); * writer.Flush();*/ }
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(" "); }
public static void PushIndent(this IT4Template writer) { writer.PushIndent(" "); }