コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }