LoadData.cs 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616
  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 == "errorCodes")
  76. {
  77. entity.ErrorCodes = childNode.InnerText.Trim();
  78. }
  79. else if (childNode.Name == "show")
  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.ErrorCodes))
  183. {
  184. methodModel.ErrorCodes = methodItem.ErrorCodes;
  185. }
  186. if (!string.IsNullOrEmpty(methodModel.ParamTypeFullName))
  187. {
  188. //封装请求参数实体
  189. var requestClassNamespace = "T:" + methodModel.ParamTypeFullName;
  190. var requestClassMemberInfo = memberList.Find(c => c.ParamName.Contains(requestClassNamespace));
  191. if (requestClassMemberInfo == null)
  192. {
  193. continue;
  194. }
  195. var tuple = GetRequestParameterPropertyList(methodModel.ParamTypeFullName);
  196. ParamPropertyEntity requestEntity = new ParamPropertyEntity()
  197. {
  198. Desc = requestClassMemberInfo.Summary,
  199. ParamPropertyList = tuple.Item1,
  200. Name = methodModel.ParamTypeFullName.Split('.').Last(),
  201. TypeFullName = !string.IsNullOrEmpty(tuple.Item2) ? tuple.Item2 : methodModel.ParamTypeFullName,
  202. DefaultValue = requestClassMemberInfo.Value,
  203. IsNotNull = "1"
  204. };
  205. methodModel.RequestList.Add(requestEntity);
  206. }
  207. //封装响应参数实体
  208. var methodInfoItem = type.GetMethod(methodModel.MethodName);
  209. var returnTypeParams = methodInfoItem.ReturnParameter?.ParameterType?.GenericTypeArguments;
  210. if (returnTypeParams != null && returnTypeParams.Length > 0)
  211. {
  212. methodModel.ResponseList = GetReturnParameterPropertyList(returnTypeParams, methodModel.Returns, methodModel.Value);
  213. }
  214. interfaceModel.MethodList.Add(methodModel);
  215. }
  216. }
  217. }
  218. if (interfaceModel.MethodList.Count <= 0)
  219. {
  220. continue;
  221. }
  222. entity.InterfaceList.Add(interfaceModel);
  223. }
  224. //如果为空就表示要新增
  225. if (!string.IsNullOrEmpty(item.Value))
  226. {
  227. if (string.IsNullOrEmpty(entity.Value))
  228. {
  229. entity.Value = item.Value;
  230. list.Add(entity);
  231. }
  232. }
  233. }
  234. apiModuleEntity.MainModelList = list;
  235. moduleList.Add(apiModuleEntity);
  236. }
  237. }
  238. string json = Newtonsoft.Json.JsonConvert.SerializeObject(moduleList);
  239. return moduleList;
  240. }
  241. /// <summary>
  242. /// 获取返回参数列表
  243. /// </summary>
  244. /// <param name="returnTypeParams"></param>
  245. /// <param name="desc"></param>
  246. /// <returns></returns>
  247. private static List<ParamPropertyEntity> GetReturnParameterPropertyList(Type[] returnTypeParams, string desc, string value)
  248. {
  249. var resultList = new List<ParamPropertyEntity>();
  250. try
  251. {
  252. if (returnTypeParams == null || returnTypeParams[0] == null)
  253. {
  254. return resultList;
  255. }
  256. var propertyModel = new ParamPropertyEntity()
  257. {
  258. Desc = desc,
  259. Name = returnTypeParams[0].Name
  260. };
  261. if (returnTypeParams[0].FullName.Contains("System.Collections.Generic.List") && CommonHelper.SubstringCount(returnTypeParams[0].FullName, "WingInterfaceLibrary") > 2)
  262. {
  263. propertyModel.TypeFullName = returnTypeParams[0].Namespace + "." + returnTypeParams[0].Name;
  264. var fxClassNamespace = returnTypeParams[0].FullName.Replace(propertyModel.TypeFullName, "") ?? string.Empty;
  265. propertyModel.ParamPropertyList = GetRequestParameterPropertyList(propertyModel.TypeFullName, fxClassNamespace).Item1;
  266. }
  267. else if (returnTypeParams[0].GenericTypeArguments?.Length > 0)
  268. {
  269. propertyModel.TypeFullName = returnTypeParams[0].Namespace + "." + returnTypeParams[0].Name;
  270. var fxClassNamespace = returnTypeParams[0].FullName.Replace(propertyModel.TypeFullName, "").Replace("[[", "").Split(',')?.FirstOrDefault() ?? string.Empty;
  271. propertyModel.ParamPropertyList = GetRequestParameterPropertyList(propertyModel.TypeFullName, fxClassNamespace).Item1;
  272. }
  273. else
  274. {
  275. propertyModel.TypeFullName = returnTypeParams[0].FullName;
  276. propertyModel.DefaultValue = value;
  277. propertyModel.ParamPropertyList = GetRequestParameterPropertyList(propertyModel.TypeFullName).Item1;
  278. }
  279. resultList.Add(propertyModel);
  280. return resultList;
  281. }
  282. catch (Exception ex)
  283. {
  284. Console.WriteLine($"GetChildArguments异常信息:{ex}");
  285. return resultList;
  286. }
  287. }
  288. /// <summary>
  289. /// 获取请求参数列表
  290. /// </summary>
  291. /// <returns></returns>
  292. private static Tuple<List<ParamPropertyEntity>,string> GetRequestParameterPropertyList(string namespacePath, string fxClassNamespace = "")
  293. {
  294. string returnSpecialType = "";
  295. Assembly assembly = GetAssemblyFromCache();
  296. var memberList = GetInterfaceConfigToCache();
  297. var resultList = new List<ParamPropertyEntity>();
  298. try
  299. {
  300. if (string.IsNullOrEmpty(namespacePath))
  301. {
  302. return Tuple.Create(resultList, returnSpecialType);
  303. }
  304. else if (namespacePath.Contains("System.Collections.Generic.List"))
  305. {
  306. if (!string.IsNullOrEmpty(fxClassNamespace))
  307. {
  308. if (CommonHelper.SubstringCount(fxClassNamespace, "WingInterfaceLibrary") > 2)
  309. {
  310. var fxn1 = fxClassNamespace.Split('`')[0].Replace("[[", "") + "`1";
  311. var fxn2 = fxClassNamespace.Split('`')[1].Split(',')[0].Replace("1[[", "");
  312. var propertyModelTemp = new ParamPropertyEntity();
  313. propertyModelTemp.TypeFullName = fxn1;
  314. var requestClassNamespace = "T:" + propertyModelTemp.TypeFullName;
  315. var requestClassMemberInfo = memberList.Find(c => c.ParamName.Contains(requestClassNamespace));
  316. if (requestClassMemberInfo != null)
  317. {
  318. propertyModelTemp.DefaultValue = requestClassMemberInfo.Value;
  319. propertyModelTemp.Desc = requestClassMemberInfo.Summary;
  320. propertyModelTemp.IsNotNull = requestClassMemberInfo.Code;
  321. propertyModelTemp.Name = propertyModelTemp.TypeFullName.Split('.').LastOrDefault();
  322. var tuple = GetRequestParameterPropertyList(propertyModelTemp.TypeFullName, fxn2);
  323. propertyModelTemp.ParamPropertyList = tuple.Item1;
  324. if (!string.IsNullOrEmpty(tuple.Item2))
  325. {
  326. propertyModelTemp.TypeFullName = tuple.Item2;
  327. }
  328. }
  329. resultList.Add(propertyModelTemp);
  330. }
  331. else
  332. {
  333. var propertyModelTemp = new ParamPropertyEntity();
  334. propertyModelTemp.TypeFullName = fxClassNamespace;
  335. var requestClassNamespace = "T:" + propertyModelTemp.TypeFullName;
  336. var requestClassMemberInfo = memberList.Find(c => c.ParamName.Contains(requestClassNamespace));
  337. if (requestClassMemberInfo != null)
  338. {
  339. propertyModelTemp.DefaultValue = requestClassMemberInfo.Value;
  340. propertyModelTemp.Desc = requestClassMemberInfo.Summary;
  341. propertyModelTemp.IsNotNull = requestClassMemberInfo.Code;
  342. propertyModelTemp.Name = propertyModelTemp.TypeFullName.Split('.').LastOrDefault();
  343. var tuple = GetRequestParameterPropertyList(propertyModelTemp.TypeFullName);
  344. propertyModelTemp.ParamPropertyList = tuple.Item1;
  345. if (!string.IsNullOrEmpty(tuple.Item2))
  346. {
  347. propertyModelTemp.TypeFullName = tuple.Item2;
  348. }
  349. }
  350. resultList.Add(propertyModelTemp);
  351. }
  352. }
  353. }
  354. else
  355. {
  356. Type newType = assembly.GetType(namespacePath);
  357. if (newType != null)
  358. {
  359. var parentResultList = GetParentProperty(newType.BaseType, ref returnSpecialType);
  360. if (parentResultList?.Count > 0)
  361. {
  362. resultList.AddRange(parentResultList);
  363. }
  364. PropertyInfo[] p = newType.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);
  365. foreach (var item in p)
  366. {
  367. var propertyModel = new ParamPropertyEntity();
  368. var type = item.PropertyType.Name;
  369. var paramName = "P:" + namespacePath + "." + item.Name;
  370. var memberEntity = memberList.Find(c => c.ParamName == paramName) ?? new MemberEntity();
  371. string desc = "";
  372. if (memberEntity == null || string.IsNullOrEmpty(memberEntity.Summary))
  373. {
  374. AttributeCollection attributes = TypeDescriptor.GetProperties(newType)[item.Name].Attributes;
  375. DescriptionAttribute myAttribute = (DescriptionAttribute)attributes[typeof(DescriptionAttribute)];
  376. desc = myAttribute.Description;
  377. }
  378. else
  379. {
  380. desc = memberEntity.Summary.Replace("\r\n", "").Replace(" ", "").Replace(" ", "").Replace(" ", "");
  381. }
  382. propertyModel.TypeFullName = type;
  383. propertyModel.DefaultValue = memberEntity.Value;
  384. propertyModel.IsNotNull = memberEntity.Code;
  385. propertyModel.Name = item.Name;
  386. propertyModel.Desc = desc;
  387. if (!string.IsNullOrEmpty(item.PropertyType.FullName))
  388. {
  389. if (item.PropertyType.FullName.Contains("WingInterfaceLibrary"))
  390. {
  391. if (item.PropertyType.FullName.Contains("System.Collections.Generic.List"))
  392. {
  393. var fx = item.PropertyType.FullName.Split(',')?.FirstOrDefault()?.Replace("System.Collections.Generic.List`1[[", "");
  394. if (!fx.Contains(namespacePath))
  395. {
  396. var tuple = GetRequestParameterPropertyList(item.PropertyType.FullName, fx);
  397. propertyModel.ParamPropertyList = tuple.Item1;
  398. if (!string.IsNullOrEmpty(tuple.Item2))
  399. {
  400. propertyModel.TypeFullName = tuple.Item2;
  401. }
  402. }
  403. }
  404. else if(item.PropertyType.FullName.Contains("WingInterfaceLibrary.Enum."))
  405. {
  406. propertyModel.TypeFullName = item.PropertyType.FullName;
  407. }
  408. else
  409. {
  410. var propertyModelTemp = new ParamPropertyEntity();
  411. propertyModelTemp.TypeFullName = item.PropertyType.FullName;
  412. propertyModelTemp.DefaultValue = "";
  413. propertyModelTemp.Desc = desc;
  414. propertyModelTemp.IsNotNull = memberEntity.Code;
  415. propertyModelTemp.Name = item.Name;
  416. if (!item.PropertyType.FullName.Contains(namespacePath))
  417. {
  418. var tuple = GetRequestParameterPropertyList(item.PropertyType.FullName);
  419. propertyModelTemp.ParamPropertyList = tuple.Item1;
  420. if (!string.IsNullOrEmpty(tuple.Item2))
  421. {
  422. propertyModelTemp.TypeFullName = tuple.Item2;
  423. }
  424. }
  425. propertyModel.ParamPropertyList.Add(propertyModelTemp);
  426. }
  427. }
  428. else
  429. {
  430. if (item.PropertyType.FullName.Contains("System.Collections.Generic.List"))
  431. {
  432. propertyModel.GenericityType = item.PropertyType.FullName.Split(',').FirstOrDefault().Replace("System.Collections.Generic.List`1[[", "");
  433. }
  434. }
  435. }
  436. else if (type.Contains("List`1"))
  437. {
  438. if (!string.IsNullOrEmpty(fxClassNamespace))
  439. {
  440. if (fxClassNamespace.Contains("WingInterfaceLibrary"))
  441. {
  442. var propertyModelTemp = new ParamPropertyEntity();
  443. propertyModelTemp.TypeFullName = fxClassNamespace;
  444. var requestClassNamespace = "T:" + propertyModelTemp.TypeFullName;
  445. var requestClassMemberInfo = memberList.Find(c => c.ParamName.Contains(requestClassNamespace));
  446. if (requestClassMemberInfo != null)
  447. {
  448. propertyModelTemp.DefaultValue = requestClassMemberInfo.Value;
  449. propertyModelTemp.Desc = requestClassMemberInfo.Summary;
  450. propertyModelTemp.IsNotNull = requestClassMemberInfo.Code;
  451. propertyModelTemp.Name = propertyModelTemp.TypeFullName.Split('.').LastOrDefault();
  452. if (!propertyModelTemp.TypeFullName.Contains(namespacePath))
  453. {
  454. var tuple = GetRequestParameterPropertyList(propertyModelTemp.TypeFullName);
  455. propertyModelTemp.ParamPropertyList = tuple.Item1;
  456. if (!string.IsNullOrEmpty(tuple.Item2))
  457. {
  458. propertyModelTemp.TypeFullName = tuple.Item2;
  459. }
  460. }
  461. propertyModel.ParamPropertyList.Add(propertyModelTemp);
  462. }
  463. }
  464. else if (fxClassNamespace.Contains("WingInterfaceLibrary.Enum."))
  465. {
  466. propertyModel.TypeFullName = fxClassNamespace;
  467. }
  468. else
  469. {
  470. propertyModel.GenericityType = "String";
  471. }
  472. }
  473. else
  474. {
  475. propertyModel.GenericityType = "String";
  476. }
  477. }
  478. resultList.Add(propertyModel);
  479. }
  480. }
  481. }
  482. return Tuple.Create(resultList, returnSpecialType);
  483. }
  484. catch (Exception ex)
  485. {
  486. Console.WriteLine($"GetChildArguments异常信息:{ex}");
  487. return Tuple.Create(resultList, returnSpecialType);
  488. }
  489. }
  490. /// <summary>
  491. /// 获取父类的属性
  492. /// </summary>
  493. /// <param name="assembly"></param>
  494. /// <param name="returnSpecialType">返回特殊类型</param>
  495. private static List<ParamPropertyEntity> GetParentProperty(Type baseType, ref string returnSpecialType)
  496. {
  497. List<ParamPropertyEntity> list = new List<ParamPropertyEntity>();
  498. try
  499. {
  500. if (baseType != null)
  501. {
  502. Assembly assembly = GetAssemblyFromCache();
  503. var memberList = GetInterfaceConfigToCache();
  504. var namespacePath = baseType.FullName;
  505. if (namespacePath.Contains("BaseParamsString"))
  506. {
  507. returnSpecialType = "String";
  508. return list;
  509. }
  510. if (namespacePath != "System.Object")
  511. {
  512. var resultList = GetParentProperty(baseType.BaseType, ref returnSpecialType);
  513. if (resultList?.Count > 0)
  514. {
  515. list.AddRange(resultList);
  516. }
  517. }
  518. PropertyInfo[] p = baseType.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);
  519. if (p?.Length > 0)
  520. {
  521. foreach (var item in p)
  522. {
  523. ParamPropertyEntity propertyModel = new ParamPropertyEntity();
  524. var type = item.PropertyType.Name;
  525. var paramName = "P:" + namespacePath + "." + item.Name;
  526. var memberEntity = memberList.Find(c => c.ParamName == paramName) ?? new MemberEntity();
  527. if (memberEntity != null)
  528. {
  529. var desc = memberEntity?.Summary?.Replace("\r\n", "")?.Replace(" ", "")?.Replace(" ", "")?.Replace(" ", "") ?? string.Empty;
  530. propertyModel.DefaultValue = memberEntity.Value;
  531. propertyModel.TypeFullName = type;
  532. propertyModel.Name = item.Name;
  533. propertyModel.IsNotNull = memberEntity.Code;
  534. propertyModel.Desc = desc;
  535. if (item.PropertyType.FullName.Contains("WingInterfaceLibrary"))
  536. {
  537. var fxClassNamespace = "";
  538. if (item.PropertyType.FullName.Contains("System.Collections.Generic.List"))
  539. {
  540. fxClassNamespace = item.PropertyType.FullName.Split(',')?.FirstOrDefault()?.Replace("System.Collections.Generic.List`1[[", "");
  541. }
  542. var tupel = GetRequestParameterPropertyList(item.PropertyType.FullName, fxClassNamespace);
  543. propertyModel.ParamPropertyList = tupel.Item1;
  544. if (!string.IsNullOrEmpty(tupel.Item2))
  545. {
  546. propertyModel.TypeFullName = tupel.Item2;
  547. }
  548. }
  549. }
  550. list.Add(propertyModel);
  551. }
  552. }
  553. }
  554. }
  555. catch (Exception ex)
  556. {
  557. Console.WriteLine($"GetParentProperty异常信息:{ex}");
  558. return new List<ParamPropertyEntity>();
  559. }
  560. return list;
  561. }
  562. /// <summary>
  563. /// 反射导入dll
  564. /// </summary>
  565. private static Assembly GetInterfaceAssemblyInfo(string physicsPath, string version)
  566. {
  567. //dll文件路径
  568. string path = physicsPath + $"WingInterfaceLibrary{version}.dll";
  569. //加载dll文件
  570. Assembly assembly = Assembly.LoadFile(path);
  571. return assembly;
  572. }
  573. /// <summary>
  574. /// 加载信息到缓存
  575. /// = @"D:\Project\git\New_Wing_Solution\WingInterfaceLibrary\src\bin\Debug\net6.0\"
  576. /// </summary>
  577. public static void SetInterfaceConfigToCache(string physicsPath, string version = "")
  578. {
  579. var key = "LoadAssemblyInterface";
  580. var assembly = GetInterfaceAssemblyInfo(physicsPath, version);
  581. CommonMemoryCaching.GetInstance().SetValueToCache(key, assembly, false);
  582. var keyXml = "LoadAInterfaceLibrary";
  583. var list = GetInterfaceMemberInfo(physicsPath, version);
  584. CommonMemoryCaching.GetInstance().SetValueToCache(keyXml, list, false);
  585. }
  586. /// <summary>
  587. /// 从缓存中加载信息
  588. /// </summary>
  589. public static Assembly GetAssemblyFromCache()
  590. {
  591. var key = "LoadAssemblyInterface";
  592. var assembly = (Assembly)CommonMemoryCaching.GetInstance().GetValueFromCache(key);
  593. return assembly;
  594. }
  595. /// <summary>
  596. /// 从缓存中加载信息
  597. /// </summary>
  598. public static List<MemberEntity> GetInterfaceConfigToCache()
  599. {
  600. var key = "LoadAInterfaceLibrary";
  601. var list = (List<MemberEntity>)CommonMemoryCaching.GetInstance().GetValueFromCache(key);
  602. return list;
  603. }
  604. }
  605. }