/// <summary> /// 构造函数 /// </summary> /// <param name="parent"></param> /// <param name="genericMenuItemAttribute"></param> /// <param name="methodInfo"></param> public GenericMenuItemInfo(GenericMenuItemInfo parent, GenericMenuItemAttribute genericMenuItemAttribute, MethodInfo methodInfo) { name = genericMenuItemAttribute.names[genericMenuItemAttribute.currentNameIndex]; this.parent = parent; this.itemName = genericMenuItemAttribute.itemName; genericMenuItemAttribute.currentNameIndex++; Update(genericMenuItemAttribute, methodInfo); }
/// <summary> /// 加载所有GenericMenuCat菜单到dict中 /// </summary> public static void Load() { dict.Clear(); Assembly assembly = Assembly.GetExecutingAssembly(); foreach (MemberInfo memberInfo in assembly.GetCustomAttributeMemberInfos <GenericMenuItemAttribute>()) { GenericMenuItemAttribute genericMenuItemAttribute = memberInfo.GetCustomAttribute <GenericMenuItemAttribute>(); GenericMenuCat genericMenuCat = dict.GetOrAddDefault(genericMenuItemAttribute.rootName, () => new GenericMenuCat()); genericMenuCat.InitOrUpdateRoot(genericMenuItemAttribute, (MethodInfo)memberInfo); } }
/// <summary> /// 更新该节点的信息 /// </summary> /// <param name="genericMenuItemAttribute"></param> /// <param name="methodInfo"></param> public void Update(GenericMenuItemAttribute genericMenuItemAttribute, MethodInfo methodInfo) { if (this.priority > genericMenuItemAttribute.priority) { this.priority = genericMenuItemAttribute.priority; } if (genericMenuItemAttribute.names.Length - genericMenuItemAttribute.currentNameIndex >= 1) { SubNamesLengthGreaterThanOrEquals_1_Condition(genericMenuItemAttribute, methodInfo); } else { SubNamesLengthEquals_0_Condition(methodInfo, genericMenuItemAttribute); } }
/// <summary> /// subNamesLenght>=1的情况 /// </summary> /// <param name="genericMenuItemAttribute"></param> /// <param name="methodInfo"></param> public void SubNamesLengthGreaterThanOrEquals_1_Condition(GenericMenuItemAttribute genericMenuItemAttribute, MethodInfo methodInfo) { string firstSubName = genericMenuItemAttribute.names[genericMenuItemAttribute.currentNameIndex]; GenericMenuItemInfo target = children.Find(e => e.name.Equals(firstSubName)); if (target == null) { children.Add(new GenericMenuItemInfo(this, genericMenuItemAttribute, methodInfo)); } else { genericMenuItemAttribute.currentNameIndex++; target.Update(genericMenuItemAttribute, methodInfo); } }
/// <summary> /// subNamesLenght==0的情况 /// </summary> /// <param name="methodInfo"></param> /// <param name="genericMenuItemAttribute"></param> public void SubNamesLengthEquals_0_Condition(MethodInfo methodInfo, GenericMenuItemAttribute genericMenuItemAttribute) { if (methodInfo.ReturnType == typeof(bool)) { this.methodInfoValidate = methodInfo; } else { this.methodInfo = methodInfo; } if (genericMenuItemAttribute.isValidate) { this.isValidate = true; } }