/// <summary> /// 获取动作的状态 /// </summary> /// <param name="action"></param> /// <returns></returns> public object GetActionCorrelationState(IU9BehaviorAction action) { if (!_actionCorrelationStateDict.ContainsKey(action)) { throw new Exception("action correlationState does not exist"); } return(_actionCorrelationStateDict[action]); }
/// <summary> /// 添加动作 /// </summary> /// <param name="action"></param> /// <param name="correlationState"></param> public void AddAction(IU9BehaviorAction action, object correlationState) { if (_actions.Contains(action)) { throw new Exception("action cannot be repeated"); } _actions.Add(action); _actionCorrelationStateDict.Add(action, correlationState); }
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) { if (WebOperationContext.Current == null) { throw new WebFaultException(HttpStatusCode.BadRequest); } U9ActionCorrelationState correlationState = new U9ActionCorrelationState(); U9ActionSectionGroup group = U9ActionSectionGroup.GetConfig(); for (int i = 0; i < group.Actions.Count; i++) { U9ActionSection section = group.Actions[i]; IU9BehaviorAction action = Activator.CreateInstance(section.LoadType) as IU9BehaviorAction; if (action == null) { throw new Exception("u9Action must inherit IU9BehaviorAction"); } object result = action.BeforeDo(ref request, channel, instanceContext, correlationState); correlationState.AddAction(action, result); } return(correlationState); }
public void BeforeSendReply(ref Message reply, object correlationState) { U9ActionCorrelationState u9ActionCorrelationState = correlationState as U9ActionCorrelationState; if (u9ActionCorrelationState == null) { return; } for (int i = u9ActionCorrelationState.Actions.Count - 1; i >= 0; i--) { try { IU9BehaviorAction action = u9ActionCorrelationState.Actions[i]; object beforeReturnObj = u9ActionCorrelationState.GetActionCorrelationState(action); action.AfterDo(ref reply, beforeReturnObj, u9ActionCorrelationState); } catch (Exception ex) { Logger.Debug("执行U9 Action后事件失败:{0}", i); Logger.Debug(ex); } } }