public static PointLogicEntity LoadSubpoint(Type t, List <Type> logics) { //递归获取subpoint,构建entrylogic var rtn = new PointLogicEntity(t); var subs = logics.Where(p => p.GetTypeInfo().BaseType == t); var list = new Dictionary <string, PointLogicEntity>(); foreach (var sub in subs) { var point = LoadSubpoint(sub, logics); var key = point.LogicName; list.Add(key, point); } rtn.SubPoints = list; //构建路由表-路由表只在入口logic中建立 if (rtn.LogicType.GetTypeInfo().BaseType == typeof(EndPoint)) { var rlist = new Dictionary <string, RouteMethod>(); rtn.BuildRouteTable(rlist); rtn.RouteTable = rlist; } return(rtn); }
public static PointContext Create(string assemblyName, string mainversion) { var rtn = new PointContext(); rtn.MainVersion = mainversion; Assembly asm = Assembly.Load(new AssemblyName(assemblyName)); Type[] ts = asm.GetTypes(); var reg = new Regex(@"(?<=.)V\d+._\d+", RegexOptions.IgnoreCase); var list = ts.Where(p => p.GetTypeInfo().IsSubclassOf(typeof(EndPoint))).ToList(); foreach (var t in list.Where(p => p.GetTypeInfo().BaseType == typeof(EndPoint))) { var ple = PointLogicEntity.LoadSubpoint(t, list); var key = $"{ple.APIVersion}-{ple.LogicName}"; if (!rtn._d_entry_.ContainsKey(ple.APIVersion)) { rtn._d_entry_.Add(ple.APIVersion, new Dictionary <string, PointLogicEntity>()); } rtn._d_entry_[ple.APIVersion].Add(ple.LogicName, ple); } rtn.RouteDesc = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase); rtn.MainRouteDesc = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase); foreach (var ver in rtn._d_entry_.Keys) { rtn.RouteDesc.SetValue(ver, FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase)); dynamic vroute = rtn.RouteDesc.GetValue(ver); foreach (var item in rtn._d_entry_[ver]) { var index = 0; foreach (var rm in item.Value.RouteTable) { index++; var info = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase); info.Desc = rm.Value.RouteDesc; info.Url = rm.Key; vroute.SetValue(ver + "-" + index, info); if (ver == rtn.MainVersion) { var mvinfo = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase); mvinfo.Desc = rm.Value.RouteDesc; mvinfo.Url = rm.Key.Replace($"/{ver}", ""); rtn.MainRouteDesc.SetValue(ver + "-" + index, mvinfo); } } } } return(rtn); }