/// <summary> /// /// </summary> /// <param name="define"></param> public AsyncMessageHandleMethod(AssemblyClassMethodAndAttribute define) { this.MessageHandleMethod = define; var attribute = define.Attribute as RegisterAsyncMessageHandleAttribute; var parameterType = attribute.MessageContentType; var genericObjectType = typeof(AsyncMessageContentWrapper <>); messageContentType = genericObjectType.MakeGenericType(parameterType); }
/// <summary> /// /// </summary> /// <param name="define"></param> private void Register(AssemblyClassMethodAndAttribute define) { var attribute = define.Attribute as RegisterAsyncMessageHandleAttribute; var type = attribute.MessageType; if (attribute.MessageContentType == null) { attribute.MessageContentType = define.Method.GetParameters()[0].ParameterType; } map[type] = new AsyncMessageHandleMethod(define); }
/// <summary> /// 根据实体类 和 操作路径 获取 AssemblyClassMethodAndAttribute<AbstractEntitysOperateDefineAttribute> /// 的实例; /// </summary> /// <param name="entityType"></param> /// <param name="operatePath"></param> /// <returns></returns> public static AssemblyClassMethodAndAttribute <AbstractEntitysOperateDefineAttribute> GetOperateDefine( Type entityType, string operatePath) { Dictionary <string, AssemblyClassMethodAndAttribute <AbstractEntitysOperateDefineAttribute> > innerMap; if (map.TryGetValue(entityType.Name, out innerMap)) { AssemblyClassMethodAndAttribute <AbstractEntitysOperateDefineAttribute> result = null; if (innerMap.TryGetValue(operatePath, out result)) { return(result); } } return(null); }
/// <summary> /// /// </summary> /// <param name="handleDefineList"></param> public void Setup <T>(List <T> handleDefineList) where T : AbstractAsyncMessageHandleDefine { if (handleDefineList != null) { foreach (var defineGroup in handleDefineList.GroupBy(a => a.AssemblyName)) { Assembly assembly = null; if (defineGroup.Key == null) { assembly = DefaultAssembly; } else { assembly = Assembly.Load(defineGroup.Key); } if (assembly == null) { continue; } foreach (var define in defineGroup) { var type = assembly.GetType(define.ClassName); if (type == null) { this.errorLog?.Invoke(string.Format("无法找到类:{0}", define.ClassName)); return; } var method = type.GetMethods().Where(a => { if (a.Name != define.MethodName) { return(false); } var par = a.GetParameters(); if (ArrayUtil.IsNullOrEmpty(par)) { return(false); } if (par.Length > 1) { return(false); } if (!par[0].ParameterType.Name.EndsWith(define.ParameterType)) { return(false); } return(true); }).FirstOrDefault(); if (method == null) { this.errorLog?.Invoke(string.Format("无法找到类 {0} 处理方法:{1}", define.ClassName, define.MethodName)); return; } // var parType = method.GetParameters()[0].ParameterType; var attribute = new RegisterAsyncMessageHandleAttribute(define.MessageType, null, define.IsThreadSafe); AssemblyClassMethodAndAttribute definex = new AssemblyClassMethodAndAttribute { Assembly = assembly, Type = type, Method = method, Attribute = attribute }; Register(definex); } } } }