/// <summary> /// 生成接口列表描述 /// </summary> /// <param name="interList"></param> /// <param name="dic"></param> /// <returns></returns> public static InterfaceList GenerateInterfaceList(this InterfaceList interList, Dictionary <string, string> dic) { InterfaceList interfaceList = new InterfaceList(); foreach (KeyValuePair <string, string> item in dic) { InterfaceDiscription interDis = CodeHelper.GetInterfaceDiscrption(item.Value); interfaceList.lstInterDis.Add(interDis); } return(interfaceList); }
/// <summary> /// 生成接口描述类 /// </summary> /// <param name="code"></param> public static InterfaceDiscription GetInterfaceDiscrption(string code) { InterfaceDiscription interDis = new InterfaceDiscription(); SyntaxTree tree = Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree.ParseText(code); var root = (Microsoft.CodeAnalysis.CSharp.Syntax.CompilationUnitSyntax)tree.GetRoot(); var collctor = new UsingCollector();//收集非System程序集的引用 collctor.Visit(root); foreach (var item in collctor.Usings) { interDis.InterUsings.Add(new InterfaceUsingDiscription { UsingName = "using " + item.Name.ToString() }); } var firstMember = root.Members[0]; NamespaceDeclarationSyntax NameSpaceDeclaration = (NamespaceDeclarationSyntax)firstMember; InterfaceDeclarationSyntax interfaceDeclaration = (InterfaceDeclarationSyntax)NameSpaceDeclaration.Members[0]; string NameSpaceName = NameSpaceDeclaration.Name.ToString(); // interDis.FileName = NameSpaceName.Substring(NameSpaceName.LastIndexOf(".")+1);//接口所在文件名 interDis.InterfaceName = interfaceDeclaration.Identifier.Value.ToString(); //接口名称 interDis.NameSpaceName = NameSpaceDeclaration.Name.ToString(); //命名空间 //接口方法 interfaceDeclaration.Members.ToList().ForEach(y => { InterfaceMethodDiscription methodDis = new InterfaceMethodDiscription(); //接口方法描述 MethodDeclarationSyntax methodDeclaration = (MethodDeclarationSyntax)y; var paramsDeclaration = methodDeclaration.ParameterList.Parameters; //请求参数集合 methodDis.Response.ResponseParamDis = ""; //返回值描述 methodDis.Response.ResponseParamType = methodDeclaration.ReturnType.ToString(); //响应类型 methodDis.InterfaceMethodName = methodDeclaration.Identifier.ToString(); //接口方法名称 methodDis.InterfaceMethodDis = ""; //接口方法描述 //接口请求参数 paramsDeclaration.ToList().ForEach(x => { RequestParamsDiscription requestDis = new RequestParamsDiscription(); //请求描述 requestDis.RequestParamDis = ""; //请求参数描述 requestDis.RequestParamName = x.Identifier.ToString(); //请求参数名称 requestDis.RequestParamType = x.Type.ToString(); //请求参数类型 methodDis.Request.Add(requestDis); }); interDis.MethodDis.Add(methodDis); }); return(interDis); }