LoadData.cs 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619
  1. using DocTools.Entity;
  2. using DocTools.Helper;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Linq;
  7. using System.Reflection;
  8. using System.Xml;
  9. namespace DocTools
  10. {
  11. /// <summary>
  12. /// 导入帮助类
  13. /// </summary>
  14. public class LoadData
  15. {
  16. /// <summary>
  17. /// 根据xml获取成员信息
  18. /// = @"D:\Project\git\New_Wing_Solution\WingInterfaceLibrary\src\bin\Debug\net6.0\"
  19. /// </summary>
  20. public static List<MemberEntity> GetInterfaceMemberInfo(string physicsPath, string version)
  21. {
  22. var memberList = new List<MemberEntity>();
  23. var xmlPath = physicsPath + $"WingInterfaceLibrary{version}.xml";
  24. XmlDocument doc = new XmlDocument();
  25. doc.Load(xmlPath);
  26. XmlNodeList interfaceNodeList = doc.SelectNodes("//member");
  27. if (interfaceNodeList != null)
  28. {
  29. foreach (XmlNode memberNode in interfaceNodeList)
  30. {
  31. MemberEntity entity = new MemberEntity();
  32. //通过Attributes获得属性名为name的属性
  33. if (memberNode.Attributes["name"] != null)
  34. {
  35. entity.ParamName = memberNode.Attributes["name"].Value;
  36. }
  37. if (memberNode.HasChildNodes)
  38. {
  39. foreach (XmlNode childNode in memberNode.ChildNodes)
  40. {
  41. if (childNode.Name == "summary")
  42. {
  43. entity.Summary = childNode.InnerText.Trim();
  44. }
  45. else if (childNode.Name == "param")
  46. {
  47. var pEntity = new ParamEntity();
  48. pEntity.ParamText = childNode.InnerText.Trim();
  49. if (childNode.Attributes["name"] != null)
  50. {
  51. pEntity.ParamName = childNode.Attributes["name"].Value;
  52. }
  53. entity.Param.Add(pEntity);
  54. }
  55. else if (childNode.Name == "returns")
  56. {
  57. entity.Returns = childNode.InnerText.Trim();
  58. }
  59. else if (childNode.Name == "value")
  60. {
  61. entity.Value = childNode.InnerText.Trim().Replace("%26","&");
  62. }
  63. else if (childNode.Name == "remarks")
  64. {
  65. entity.Remarks = childNode.InnerText.Trim();
  66. }
  67. else if (childNode.Name == "code")
  68. {
  69. entity.Code = childNode.InnerText.Trim();
  70. }
  71. else if (childNode.Name == "example")
  72. {
  73. entity.Example = childNode.InnerText.Trim();
  74. }
  75. else if (childNode.Name == "para")
  76. {
  77. entity.Para = childNode.InnerText.Trim();
  78. }
  79. else if (childNode.Name == "notshow")
  80. {
  81. entity.C = (string.IsNullOrEmpty(childNode.InnerText.Trim()) || childNode.InnerText.Trim() == "true") ? true : false;
  82. }
  83. }
  84. }
  85. if (!string.IsNullOrEmpty(entity.ParamName))
  86. {
  87. memberList.Add(entity);
  88. }
  89. }
  90. }
  91. return memberList;
  92. }
  93. /// <summary>
  94. /// 封装接口和成员信息
  95. /// </summary>
  96. /// <returns>封装号的实体</returns>
  97. public static List<APIModuleEntity> PackageInterfaceMemberInfo(string classNamespace = "T:WingInterfaceLibrary.Interface.I")
  98. {
  99. var moduleList = new List<APIModuleEntity>();
  100. var memberList = GetInterfaceConfigToCache();
  101. //其中C为true,表示显示,其他为不显示
  102. var interfaceMemberList = memberList.FindAll(c => c.ParamName.Contains(classNamespace) && !string.IsNullOrEmpty(c.Example) && c.C);
  103. if (interfaceMemberList?.Count > 0)
  104. {
  105. //先找到大的api模块,赋值方法上的example
  106. foreach (var item in interfaceMemberList)
  107. {
  108. var methodNamespace = item.ParamName.Replace("T:", "M:");
  109. var methodMemberList = memberList.FindAll(c => c.ParamName.Contains(methodNamespace));
  110. if (methodMemberList?.Count > 0)
  111. {
  112. foreach (var methodItem in methodMemberList)
  113. {
  114. methodItem.Example = string.IsNullOrEmpty(methodItem.Example) ? item.Example : methodItem.Example;
  115. }
  116. }
  117. }
  118. var apiModuleNameList = memberList.FindAll(c => !string.IsNullOrEmpty(c.Example)).Select(c => c.Example).Distinct().ToList();
  119. if (apiModuleNameList == null || apiModuleNameList.Count <= 0)
  120. {
  121. return moduleList;
  122. }
  123. foreach (var apiModuleNameItem in apiModuleNameList)
  124. {
  125. var apiModuleEntity = new APIModuleEntity()
  126. {
  127. Example = apiModuleNameItem,
  128. IsShowEnumFolder = apiModuleNameItem == "客户端API" ? true : false
  129. };
  130. var list = new List<InterfaceInfoEntity>();
  131. foreach (var item in interfaceMemberList)
  132. {
  133. InterfaceInfoEntity entity = null;
  134. //如果存在就不用新增了,否则就要新增
  135. if (list.Exists(c => c.Value == item.Value))
  136. {
  137. entity = list.Find(c => c.Value == item.Value);
  138. }
  139. else
  140. {
  141. entity = new InterfaceInfoEntity();
  142. }
  143. if (!entity.InterfaceList.Exists(c => c.InterfaceNamespace == item.ParamName))
  144. {
  145. var interfaceModel = new InterfaceBasicInfoEntity()
  146. {
  147. InterfaceNamespace = item.ParamName,
  148. InterfaceFullName = item.ParamName.Replace("T:", ""),
  149. InterfaceName = item.ParamName.Split('.').ToList().Last(),
  150. InterfaceSummary = item.Summary,
  151. MethodNamespace = item.ParamName.Replace("T:", "M:")
  152. };
  153. var methodMemberList = memberList.FindAll(c => c.ParamName.Contains(interfaceModel.MethodNamespace) && c.Example == apiModuleNameItem);
  154. if (methodMemberList?.Count > 0)
  155. {
  156. Type type = GetAssemblyFromCache().GetType(interfaceModel.InterfaceFullName);
  157. foreach (var methodItem in methodMemberList)
  158. {
  159. if (!methodItem.C)
  160. {
  161. continue;
  162. }
  163. if (!interfaceModel.MethodList.Exists(c => c.MethodNameSpace == methodItem.ParamName))
  164. {
  165. var methodModel = new MethodBasicEntity()
  166. {
  167. MethodNameSpace = methodItem.ParamName,
  168. InterfaceName = interfaceModel.InterfaceName,
  169. MethodName = methodItem.ParamName.Replace((interfaceModel.MethodNamespace + "."), "").Split('(').ToList().First(),
  170. Summary = apiModuleNameItem.Replace("API", "——") + methodItem.Summary,
  171. Returns = methodItem.Returns,
  172. Value = methodItem.Value,
  173. ReturnsTypeFullName = "",
  174. SubmitType = string.IsNullOrEmpty(methodItem.Remarks) ? "POST" : methodItem.Remarks,
  175. ParamName = methodItem.Param?.FirstOrDefault()?.ParamName,
  176. ParamText = methodItem.Param?.FirstOrDefault()?.ParamText
  177. };
  178. if (methodItem.ParamName.Split('(').Length > 1)
  179. {
  180. methodModel.ParamTypeFullName = methodItem.ParamName.Split('(')[1].TrimEnd(')');
  181. }
  182. if (!string.IsNullOrEmpty(methodItem.Para) && methodItem.Para.Split(',').Length > 0)
  183. {
  184. foreach (var paraItem in methodItem.Para.Split(','))
  185. {
  186. methodModel.ParaList.Add(paraItem);
  187. }
  188. }
  189. if (!string.IsNullOrEmpty(methodModel.ParamTypeFullName))
  190. {
  191. //封装请求参数实体
  192. var requestClassNamespace = "T:" + methodModel.ParamTypeFullName;
  193. var requestClassMemberInfo = memberList.Find(c => c.ParamName.Contains(requestClassNamespace));
  194. if (requestClassMemberInfo == null)
  195. {
  196. continue;
  197. }
  198. var tuple = GetRequestParameterPropertyList(methodModel.ParamTypeFullName);
  199. ParamPropertyEntity requestEntity = new ParamPropertyEntity()
  200. {
  201. Desc = requestClassMemberInfo.Summary,
  202. ParamPropertyList = tuple.Item1,
  203. Name = methodModel.ParamTypeFullName.Split('.').Last(),
  204. TypeFullName = !string.IsNullOrEmpty(tuple.Item2) ? tuple.Item2 : methodModel.ParamTypeFullName,
  205. DefaultValue = requestClassMemberInfo.Value,
  206. IsNotNull = "1"
  207. };
  208. methodModel.RequestList.Add(requestEntity);
  209. }
  210. //封装响应参数实体
  211. var methodInfoItem = type.GetMethod(methodModel.MethodName);
  212. var returnTypeParams = methodInfoItem.ReturnParameter?.ParameterType?.GenericTypeArguments;
  213. if (returnTypeParams != null && returnTypeParams.Length > 0)
  214. {
  215. methodModel.ResponseList = GetReturnParameterPropertyList(returnTypeParams, methodModel.Returns, methodModel.Value);
  216. }
  217. interfaceModel.MethodList.Add(methodModel);
  218. }
  219. }
  220. }
  221. if (interfaceModel.MethodList.Count <= 0)
  222. {
  223. continue;
  224. }
  225. entity.InterfaceList.Add(interfaceModel);
  226. }
  227. //如果为空就表示要新增
  228. if (!string.IsNullOrEmpty(item.Value))
  229. {
  230. if (string.IsNullOrEmpty(entity.Value))
  231. {
  232. entity.Value = item.Value;
  233. list.Add(entity);
  234. }
  235. }
  236. }
  237. apiModuleEntity.MainModelList = list;
  238. moduleList.Add(apiModuleEntity);
  239. }
  240. }
  241. string json = Newtonsoft.Json.JsonConvert.SerializeObject(moduleList);
  242. return moduleList;
  243. }
  244. /// <summary>
  245. /// 获取返回参数列表
  246. /// </summary>
  247. /// <param name="returnTypeParams"></param>
  248. /// <param name="desc"></param>
  249. /// <returns></returns>
  250. private static List<ParamPropertyEntity> GetReturnParameterPropertyList(Type[] returnTypeParams, string desc, string value)
  251. {
  252. var resultList = new List<ParamPropertyEntity>();
  253. try
  254. {
  255. if (returnTypeParams == null || returnTypeParams[0] == null)
  256. {
  257. return resultList;
  258. }
  259. var propertyModel = new ParamPropertyEntity()
  260. {
  261. Desc = desc,
  262. Name = returnTypeParams[0].Name
  263. };
  264. if (returnTypeParams[0].FullName.Contains("System.Collections.Generic.List") && CommonHelper.SubstringCount(returnTypeParams[0].FullName, "WingInterfaceLibrary") > 2)
  265. {
  266. propertyModel.TypeFullName = returnTypeParams[0].Namespace + "." + returnTypeParams[0].Name;
  267. var fxClassNamespace = returnTypeParams[0].FullName.Replace(propertyModel.TypeFullName, "") ?? string.Empty;
  268. propertyModel.ParamPropertyList = GetRequestParameterPropertyList(propertyModel.TypeFullName, fxClassNamespace).Item1;
  269. }
  270. else if (returnTypeParams[0].GenericTypeArguments?.Length > 0)
  271. {
  272. propertyModel.TypeFullName = returnTypeParams[0].Namespace + "." + returnTypeParams[0].Name;
  273. var fxClassNamespace = returnTypeParams[0].FullName.Replace(propertyModel.TypeFullName, "").Replace("[[", "").Split(',')?.FirstOrDefault() ?? string.Empty;
  274. propertyModel.ParamPropertyList = GetRequestParameterPropertyList(propertyModel.TypeFullName, fxClassNamespace).Item1;
  275. }
  276. else
  277. {
  278. propertyModel.TypeFullName = returnTypeParams[0].FullName;
  279. propertyModel.DefaultValue = value;
  280. propertyModel.ParamPropertyList = GetRequestParameterPropertyList(propertyModel.TypeFullName).Item1;
  281. }
  282. resultList.Add(propertyModel);
  283. return resultList;
  284. }
  285. catch (Exception ex)
  286. {
  287. Console.WriteLine($"GetChildArguments异常信息:{ex}");
  288. return resultList;
  289. }
  290. }
  291. /// <summary>
  292. /// 获取请求参数列表
  293. /// </summary>
  294. /// <returns></returns>
  295. private static Tuple<List<ParamPropertyEntity>,string> GetRequestParameterPropertyList(string namespacePath, string fxClassNamespace = "")
  296. {
  297. string returnSpecialType = "";
  298. Assembly assembly = GetAssemblyFromCache();
  299. var memberList = GetInterfaceConfigToCache();
  300. var resultList = new List<ParamPropertyEntity>();
  301. try
  302. {
  303. if (string.IsNullOrEmpty(namespacePath))
  304. {
  305. return Tuple.Create(resultList, returnSpecialType);
  306. }
  307. else if (namespacePath.Contains("System.Collections.Generic.List"))
  308. {
  309. if (!string.IsNullOrEmpty(fxClassNamespace))
  310. {
  311. if (CommonHelper.SubstringCount(fxClassNamespace, "WingInterfaceLibrary") > 2)
  312. {
  313. var fxn1 = fxClassNamespace.Split('`')[0].Replace("[[", "") + "`1";
  314. var fxn2 = fxClassNamespace.Split('`')[1].Split(',')[0].Replace("1[[", "");
  315. var propertyModelTemp = new ParamPropertyEntity();
  316. propertyModelTemp.TypeFullName = fxn1;
  317. var requestClassNamespace = "T:" + propertyModelTemp.TypeFullName;
  318. var requestClassMemberInfo = memberList.Find(c => c.ParamName.Contains(requestClassNamespace));
  319. if (requestClassMemberInfo != null)
  320. {
  321. propertyModelTemp.DefaultValue = requestClassMemberInfo.Value;
  322. propertyModelTemp.Desc = requestClassMemberInfo.Summary;
  323. propertyModelTemp.IsNotNull = requestClassMemberInfo.Code;
  324. propertyModelTemp.Name = propertyModelTemp.TypeFullName.Split('.').LastOrDefault();
  325. var tuple = GetRequestParameterPropertyList(propertyModelTemp.TypeFullName, fxn2);
  326. propertyModelTemp.ParamPropertyList = tuple.Item1;
  327. if (!string.IsNullOrEmpty(tuple.Item2))
  328. {
  329. propertyModelTemp.TypeFullName = tuple.Item2;
  330. }
  331. }
  332. resultList.Add(propertyModelTemp);
  333. }
  334. else
  335. {
  336. var propertyModelTemp = new ParamPropertyEntity();
  337. propertyModelTemp.TypeFullName = fxClassNamespace;
  338. var requestClassNamespace = "T:" + propertyModelTemp.TypeFullName;
  339. var requestClassMemberInfo = memberList.Find(c => c.ParamName.Contains(requestClassNamespace));
  340. if (requestClassMemberInfo != null)
  341. {
  342. propertyModelTemp.DefaultValue = requestClassMemberInfo.Value;
  343. propertyModelTemp.Desc = requestClassMemberInfo.Summary;
  344. propertyModelTemp.IsNotNull = requestClassMemberInfo.Code;
  345. propertyModelTemp.Name = propertyModelTemp.TypeFullName.Split('.').LastOrDefault();
  346. var tuple = GetRequestParameterPropertyList(propertyModelTemp.TypeFullName);
  347. propertyModelTemp.ParamPropertyList = tuple.Item1;
  348. if (!string.IsNullOrEmpty(tuple.Item2))
  349. {
  350. propertyModelTemp.TypeFullName = tuple.Item2;
  351. }
  352. }
  353. resultList.Add(propertyModelTemp);
  354. }
  355. }
  356. }
  357. else
  358. {
  359. Type newType = assembly.GetType(namespacePath);
  360. if (newType != null)
  361. {
  362. var parentResultList = GetParentProperty(newType.BaseType, ref returnSpecialType);
  363. if (parentResultList?.Count > 0)
  364. {
  365. resultList.AddRange(parentResultList);
  366. }
  367. PropertyInfo[] p = newType.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);
  368. foreach (var item in p)
  369. {
  370. var propertyModel = new ParamPropertyEntity();
  371. var type = item.PropertyType.Name;
  372. var paramName = "P:" + namespacePath + "." + item.Name;
  373. var memberEntity = memberList.Find(c => c.ParamName == paramName) ?? new MemberEntity();
  374. string desc = "";
  375. if (memberEntity == null || string.IsNullOrEmpty(memberEntity.Summary))
  376. {
  377. AttributeCollection attributes = TypeDescriptor.GetProperties(newType)[item.Name].Attributes;
  378. DescriptionAttribute myAttribute = (DescriptionAttribute)attributes[typeof(DescriptionAttribute)];
  379. desc = myAttribute.Description;
  380. }
  381. else
  382. {
  383. desc = memberEntity.Summary.Replace("\r\n", "").Replace(" ", "").Replace(" ", "").Replace(" ", "");
  384. }
  385. propertyModel.TypeFullName = type;
  386. propertyModel.DefaultValue = memberEntity.Value;
  387. propertyModel.IsNotNull = memberEntity.Code;
  388. propertyModel.Name = item.Name;
  389. propertyModel.Desc = desc;
  390. if (!string.IsNullOrEmpty(item.PropertyType.FullName))
  391. {
  392. if (item.PropertyType.FullName.Contains("WingInterfaceLibrary"))
  393. {
  394. if (item.PropertyType.FullName.Contains("System.Collections.Generic.List"))
  395. {
  396. var fx = item.PropertyType.FullName.Split(',')?.FirstOrDefault()?.Replace("System.Collections.Generic.List`1[[", "");
  397. if (!fx.Contains(namespacePath))
  398. {
  399. var tuple = GetRequestParameterPropertyList(item.PropertyType.FullName, fx);
  400. propertyModel.ParamPropertyList = tuple.Item1;
  401. if (!string.IsNullOrEmpty(tuple.Item2))
  402. {
  403. propertyModel.TypeFullName = tuple.Item2;
  404. }
  405. }
  406. }
  407. else if(item.PropertyType.FullName.Contains("WingInterfaceLibrary.Enum."))
  408. {
  409. propertyModel.TypeFullName = item.PropertyType.FullName;
  410. }
  411. else
  412. {
  413. var propertyModelTemp = new ParamPropertyEntity();
  414. propertyModelTemp.TypeFullName = item.PropertyType.FullName;
  415. propertyModelTemp.DefaultValue = "";
  416. propertyModelTemp.Desc = desc;
  417. propertyModelTemp.IsNotNull = memberEntity.Code;
  418. propertyModelTemp.Name = item.Name;
  419. if (!item.PropertyType.FullName.Contains(namespacePath))
  420. {
  421. var tuple = GetRequestParameterPropertyList(item.PropertyType.FullName);
  422. propertyModelTemp.ParamPropertyList = tuple.Item1;
  423. if (!string.IsNullOrEmpty(tuple.Item2))
  424. {
  425. propertyModelTemp.TypeFullName = tuple.Item2;
  426. }
  427. }
  428. propertyModel.ParamPropertyList.Add(propertyModelTemp);
  429. }
  430. }
  431. else
  432. {
  433. if (item.PropertyType.FullName.Contains("System.Collections.Generic.List"))
  434. {
  435. propertyModel.GenericityType = item.PropertyType.FullName.Split(',').FirstOrDefault().Replace("System.Collections.Generic.List`1[[", "");
  436. }
  437. }
  438. }
  439. else if (type.Contains("List`1"))
  440. {
  441. if (!string.IsNullOrEmpty(fxClassNamespace))
  442. {
  443. if (fxClassNamespace.Contains("WingInterfaceLibrary"))
  444. {
  445. var propertyModelTemp = new ParamPropertyEntity();
  446. propertyModelTemp.TypeFullName = fxClassNamespace;
  447. var requestClassNamespace = "T:" + propertyModelTemp.TypeFullName;
  448. var requestClassMemberInfo = memberList.Find(c => c.ParamName.Contains(requestClassNamespace));
  449. if (requestClassMemberInfo != null)
  450. {
  451. propertyModelTemp.DefaultValue = requestClassMemberInfo.Value;
  452. propertyModelTemp.Desc = requestClassMemberInfo.Summary;
  453. propertyModelTemp.IsNotNull = requestClassMemberInfo.Code;
  454. propertyModelTemp.Name = propertyModelTemp.TypeFullName.Split('.').LastOrDefault();
  455. if (!propertyModelTemp.TypeFullName.Contains(namespacePath))
  456. {
  457. var tuple = GetRequestParameterPropertyList(propertyModelTemp.TypeFullName);
  458. propertyModelTemp.ParamPropertyList = tuple.Item1;
  459. if (!string.IsNullOrEmpty(tuple.Item2))
  460. {
  461. propertyModelTemp.TypeFullName = tuple.Item2;
  462. }
  463. }
  464. propertyModel.ParamPropertyList.Add(propertyModelTemp);
  465. }
  466. }
  467. else if (fxClassNamespace.Contains("WingInterfaceLibrary.Enum."))
  468. {
  469. propertyModel.TypeFullName = fxClassNamespace;
  470. }
  471. else
  472. {
  473. propertyModel.GenericityType = "String";
  474. }
  475. }
  476. else
  477. {
  478. propertyModel.GenericityType = "String";
  479. }
  480. }
  481. resultList.Add(propertyModel);
  482. }
  483. }
  484. }
  485. return Tuple.Create(resultList, returnSpecialType);
  486. }
  487. catch (Exception ex)
  488. {
  489. Console.WriteLine($"GetChildArguments异常信息:{ex}");
  490. return Tuple.Create(resultList, returnSpecialType);
  491. }
  492. }
  493. /// <summary>
  494. /// 获取父类的属性
  495. /// </summary>
  496. /// <param name="assembly"></param>
  497. /// <param name="returnSpecialType">返回特殊类型</param>
  498. private static List<ParamPropertyEntity> GetParentProperty(Type baseType, ref string returnSpecialType)
  499. {
  500. List<ParamPropertyEntity> list = new List<ParamPropertyEntity>();
  501. try
  502. {
  503. if (baseType != null)
  504. {
  505. Assembly assembly = GetAssemblyFromCache();
  506. var memberList = GetInterfaceConfigToCache();
  507. var namespacePath = baseType.FullName;
  508. if (namespacePath.Contains("BaseParamsString"))
  509. {
  510. returnSpecialType = "String";
  511. return list;
  512. }
  513. if (namespacePath != "System.Object")
  514. {
  515. var resultList = GetParentProperty(baseType.BaseType, ref returnSpecialType);
  516. if (resultList?.Count > 0)
  517. {
  518. list.AddRange(resultList);
  519. }
  520. }
  521. PropertyInfo[] p = baseType.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);
  522. if (p?.Length > 0)
  523. {
  524. foreach (var item in p)
  525. {
  526. ParamPropertyEntity propertyModel = new ParamPropertyEntity();
  527. var type = item.PropertyType.Name;
  528. var paramName = "P:" + namespacePath + "." + item.Name;
  529. var memberEntity = memberList.Find(c => c.ParamName == paramName) ?? new MemberEntity();
  530. if (memberEntity != null)
  531. {
  532. var desc = memberEntity?.Summary?.Replace("\r\n", "")?.Replace(" ", "")?.Replace(" ", "")?.Replace(" ", "") ?? string.Empty;
  533. propertyModel.DefaultValue = memberEntity.Value;
  534. propertyModel.TypeFullName = type;
  535. propertyModel.Name = item.Name;
  536. propertyModel.IsNotNull = memberEntity.Code;
  537. propertyModel.Desc = desc;
  538. if (item.PropertyType.FullName.Contains("WingInterfaceLibrary"))
  539. {
  540. var fxClassNamespace = "";
  541. if (item.PropertyType.FullName.Contains("System.Collections.Generic.List"))
  542. {
  543. fxClassNamespace = item.PropertyType.FullName.Split(',')?.FirstOrDefault()?.Replace("System.Collections.Generic.List`1[[", "");
  544. }
  545. var tupel = GetRequestParameterPropertyList(item.PropertyType.FullName, fxClassNamespace);
  546. propertyModel.ParamPropertyList = tupel.Item1;
  547. if (!string.IsNullOrEmpty(tupel.Item2))
  548. {
  549. propertyModel.TypeFullName = tupel.Item2;
  550. }
  551. }
  552. }
  553. list.Add(propertyModel);
  554. }
  555. }
  556. }
  557. }
  558. catch (Exception ex)
  559. {
  560. Console.WriteLine($"GetParentProperty异常信息:{ex}");
  561. return new List<ParamPropertyEntity>();
  562. }
  563. return list;
  564. }
  565. /// <summary>
  566. /// 反射导入dll
  567. /// </summary>
  568. private static Assembly GetInterfaceAssemblyInfo(string physicsPath, string version)
  569. {
  570. //dll文件路径
  571. string path = physicsPath + $"WingInterfaceLibrary{version}.dll";
  572. //加载dll文件
  573. Assembly assembly = Assembly.LoadFile(path);
  574. return assembly;
  575. }
  576. /// <summary>
  577. /// 加载信息到缓存
  578. /// = @"D:\Project\git\New_Wing_Solution\WingInterfaceLibrary\src\bin\Debug\net6.0\"
  579. /// </summary>
  580. public static void SetInterfaceConfigToCache(string physicsPath, string version = "")
  581. {
  582. var key = "LoadAssemblyInterface";
  583. var assembly = GetInterfaceAssemblyInfo(physicsPath, version);
  584. CommonMemoryCaching.GetInstance().SetValueToCache(key, assembly, false);
  585. var keyXml = "LoadAInterfaceLibrary";
  586. var list = GetInterfaceMemberInfo(physicsPath, version);
  587. CommonMemoryCaching.GetInstance().SetValueToCache(keyXml, list, false);
  588. }
  589. /// <summary>
  590. /// 从缓存中加载信息
  591. /// </summary>
  592. public static Assembly GetAssemblyFromCache()
  593. {
  594. var key = "LoadAssemblyInterface";
  595. var assembly = (Assembly)CommonMemoryCaching.GetInstance().GetValueFromCache(key);
  596. return assembly;
  597. }
  598. /// <summary>
  599. /// 从缓存中加载信息
  600. /// </summary>
  601. public static List<MemberEntity> GetInterfaceConfigToCache()
  602. {
  603. var key = "LoadAInterfaceLibrary";
  604. var list = (List<MemberEntity>)CommonMemoryCaching.GetInstance().GetValueFromCache(key);
  605. return list;
  606. }
  607. }
  608. }