代码结构
详细代码
StateBase.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using wg.workflow.Interface;
namespace wg.workflow.Core
{
public class StateDefintion
{
public const string Start = "Start";
public const string End = "End";
}
public class StateBase : IState, IEquatable<IState>
{
public readonly string StateId;
public IAction EnterAction { get; set; }
public IAction ExitAction { get; set; }
private Dictionary<string, ITransition> _transitionDic;
public StateBase(string stateId)
{
StateId = stateId;
_transitionDic = new Dictionary<string, ITransition>();
}
public string GetStateId()
{
return StateId;
}
private ITransition FindTransition(string transitionId)
{
return _transitionDic.ContainsKey(transitionId) ? _transitionDic[transitionId] : null;
}
public IState GoNext(string transitionId, object args)
{
var transition = FindTransition(transitionId);
if (null == transition)
return null;
if (null != transition.Actions)
{
foreach (var action in transition.Actions)
{
action.Execute(args);
}
}
return transition.To;
}
public bool IsTransitionRegistered(string transitionId)
{
return FindTransition(transitionId) != null;
}
public IList<string> ListTransitions()
{
return _transitionDic.Keys.ToList();
}
public bool RegisterTransition(ITransition transition)
{
if (null == transition || _transitionDic.ContainsKey(transition.TransitionId))
return false;
_transitionDic.Add(transition.TransitionId, transition);
return true;
}
public void Enter(object args)
{
EnterAction?.Execute(args);
}
public void Exit(