示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <summary>
        /// 根据实体类 和 操作路径 获取 AssemblyClassMethodAndAttribute&lt;AbstractEntitysOperateDefineAttribute&gt;
        /// 的实例;
        /// </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);
        }
示例#4
0
        /// <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);
                    }
                }
            }
        }