예제 #1
0
        /// <summary>
        /// 通过模式1提交到监听者
        /// 检查是否在缓存中已经存在相应的工厂类,
        //  如果不存在,根据ListenerFactoryTypeUseDI决定是通过DIContainerContainer获取工厂类,
        //  还是使用反射创建工厂类
        //  将创建出来的工厂类缓存在缓存中
        /// </summary>
        /// <param name="listener"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        private async Task <ValidateResult> PostToListenerByMode1(SMessageTypeListener listener, SMessage message)
        {
            if (!_listenerFactorys.TryGetValue(listener.ListenerFactoryType, out IFactory <ISMessageListener> listenerFactory))
            {
                lock (_listenerFactorys)
                {
                    Type listenerFactoryType = Type.GetType(listener.ListenerFactoryType);

                    if (!_listenerFactorys.TryGetValue(listener.ListenerFactoryType, out listenerFactory))
                    {
                        object objListenerFactory;
                        if (listener.ListenerFactoryTypeUseDI == true)
                        {
                            //通过DI容器创建
                            //objListenerFactory = DIContainerContainer.Get(listenerFactoryType);
                            objListenerFactory = DIContainerGetHelper.Get().Get(listenerFactoryType);
                        }
                        else
                        {
                            //通过反射创建
                            objListenerFactory = listenerFactoryType.Assembly.CreateInstance(listenerFactoryType.FullName);
                        }

                        if (!(objListenerFactory is IFactory <ISMessageListener>))
                        {
                            var fragment = new TextFragment()
                            {
                                Code = TextCodes.SMessageTypeListenerTypeError,
                                DefaultFormatting = "消息类型{0}中,名称为{1}的监听者工厂的类型{2}未实现接口IFactory<ISMessageListener>",
                                ReplaceParameters = new List <object>()
                                {
                                    listener.MessageType.Name, listener.Name, listener.ListenerFactoryType
                                }
                            };

                            throw new UtilityException((int)Errors.SMessageTypeListenerTypeError, fragment);
                        }

                        listenerFactory = (IFactory <ISMessageListener>)objListenerFactory;
                        _listenerFactorys.Add(listener.ListenerFactoryType, listenerFactory);
                    }
                }
            }

            var listenerObj = listenerFactory.Create();

            return(await listenerObj.Execute(message));
        }
예제 #2
0
        /// <summary>
        /// 通过模式1直接调用由工厂类创建的调度作业服务
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        private async Task <IScheduleActionResult> ExecuteByMode1(ScheduleAction action)
        {
            if (!_actionServiceFactories.TryGetValue(action.ScheduleActionServiceFactoryType, out IFactory <IScheduleActionService> actionFactory))
            {
                lock (_actionServiceFactories)
                {
                    Type actionFactoryType = Type.GetType(action.ScheduleActionServiceFactoryType);

                    if (!_actionServiceFactories.TryGetValue(action.ScheduleActionServiceFactoryType, out actionFactory))
                    {
                        object objActionFactory;
                        if (action.ScheduleActionServiceFactoryTypeUseDI == true)
                        {
                            //通过DI容器创建
                            //objActionFactory = DIContainerContainer.Get(actionFactoryType);
                            objActionFactory = DIContainerGetHelper.Get().Get(actionFactoryType);
                        }
                        else
                        {
                            //通过反射创建
                            objActionFactory = actionFactoryType.Assembly.CreateInstance(actionFactoryType.FullName);
                        }

                        if (!(objActionFactory is IFactory <IScheduleActionService>))
                        {
                            var fragment = new TextFragment()
                            {
                                Code = TextCodes.ScheduleActionServiceTypeError,
                                DefaultFormatting = "调度作业{0}中,调度动作服务工厂的类型{1}未实现接口IFactory<IScheduleActionService>",
                                ReplaceParameters = new List <object>()
                                {
                                    action.Name, action.ScheduleActionServiceFactoryType
                                }
                            };

                            throw new UtilityException((int)Errors.ScheduleActionServiceTypeError, fragment);
                        }

                        actionFactory = (IFactory <IScheduleActionService>)objActionFactory;
                        _actionServiceFactories.Add(action.ScheduleActionServiceFactoryType, actionFactory);
                    }
                }
            }

            var actionObj = actionFactory.Create();

            return(await actionObj.Execute(action.Configuration));
        }