/// <summary>
        /// 获取已注册的命令元数据
        /// 获取失败返回null
        /// </summary>
        /// <param name="commandUniqueName">命令全局名</param>
        /// <returns>命令元数据</returns>
        public ServiceCommandTypeInfo TryGetCommand(string commandUniqueName)
        {
            ServiceCommandTypeInfo commandInfo = null;

            this.serviceCommandDic.TryGetValue(commandUniqueName, out commandInfo);
            return(commandInfo);
        }
        /// <summary>
        /// 注册命令元数据
        /// </summary>
        /// <param name="cmdInfo">命令元数据</param>
        /// <returns>是否注册成功</returns>
        public bool RegisterCommand(ServiceCommandTypeInfo cmdInfo)
        {
            if (!this.isCmdInfoValidated(cmdInfo))
            {
                return(false);
            }

            bool isSuccessed = this.serviceCommandDic.TryAdd(cmdInfo.ServiceCommandUniqueName.FullServiceUniqueName, cmdInfo);

            return(isSuccessed);
        }
 /// <summary>
 /// 注册服务命令
 /// </summary>
 /// <param name="cmdInfo">服务命令信息</param>
 /// <returns>是否注册成功</returns>
 public bool RegisterCommand(ServiceCommandTypeInfo cmdInfo)
 {
     lock (locker)
     {
         ServiceAssemblyInfo serviceAssembly = this.getServiceAssemblyInfo(cmdInfo.ServiceCommandUniqueName.ServiceAssemblyName);
         if (serviceAssembly != null)
         {
             return(serviceAssembly.RegisterCommand(cmdInfo));
         }
         return(false);
     }
 }
        /// <summary>
        /// 是否本地服务命令
        /// </summary>
        /// <param name="targetServiceName">服务名</param>
        /// <returns></returns>
        public bool IsLocalServiceCommand(ServiceUniqueNameInfo serviceUniqueName, out ServiceCommandTypeInfo localCommandInfo)
        {
            localCommandInfo = null;

            ServiceAssemblyInfo serviceAssemblyInfo = this.getServiceAssemblyInfo(serviceUniqueName.ServiceAssemblyName);

            if (serviceAssemblyInfo != null)
            {
                ////是否本地ServiceBus包括的服务程序集
                //bool isServiceAssemblyLocal = serviceAssemblyInfo.GetServiceBusInfo()
                //    .Any(busInfo => busInfo.Equals(this.LocalBusServer));

                //if (!isServiceAssemblyLocal)
                //    return false;

                localCommandInfo = serviceAssemblyInfo.TryGetCommand(serviceUniqueName);
                if (localCommandInfo != null)
                {
                    return(true);
                }
            }
            return(false);    //服务程序集不存在
        }
        private bool isCmdInfoValidated(ServiceCommandTypeInfo cmdInfo)
        {
            if (cmdInfo == null)
            {
                return(false);
            }
            if (cmdInfo.ServiceCommandUniqueName == null || string.IsNullOrWhiteSpace(cmdInfo.ServiceCommandUniqueName.FullServiceUniqueName))
            {
                return(false);
            }

            if (cmdInfo.CommandType == null || cmdInfo.CommandResultType == null)
            {
                return(false);
            }

            if (cmdInfo.CommandHandlerFactory == null)
            {
                return(false);
            }

            return(true);
        }
        /// <summary>
        /// 是否本地服务命令
        /// </summary>
        /// <param name="targetServiceName">服务名</param>
        /// <returns></returns>
        public bool IsLocalServiceCommand(ServiceUniqueNameInfo serviceUniqueName)
        {
            ServiceCommandTypeInfo localCommandInfo = null;

            return(this.IsLocalServiceCommand(serviceUniqueName, out localCommandInfo));
        }