在无状态(.NET 状态机库)中获取具有保护条件的允许触发器
Get permitted triggers with guard conditions in Stateless (.NET state machine library)
背景:
我有相同的 Trigger
与 PermitIf
定义的互斥 guard
条件,这将导致根据这些条件转换到不同的状态。
守卫已 Descriptions
定义,它们在导出的 DOT 图表中很好地显示在括号中,因此很容易理解。
machine
.Configure(Status.Registered)
.PermitIf(Activity.Submit, Status.Submitted, IsGoodRating, "Is good rating")
.PermitIf(Activity.Submit, Status.Denied, IsBadRating, "Is bad rating")
现在,我知道 machine.PermittedTriggers
属性 returns 允许触发器处于当前状态,这很好,但问题来了。
问题:
在这种情况下,有没有办法获得 PermittedTriggers
的列表以及状态 Registered
的相应保护条件?
我想你可以做这样的事情,但是......我不知道它有多大帮助:
class Program
{
enum Status { Registered, Submitted, Denied }
static void Main(string[] args)
{
int currentRating = 91;
RatingTrigger RatingTrigger = new RatingTrigger();
StateMachine<Status, Trigger> _sm = new StateMachine<Status, Trigger>(Status.Registered);
_sm.Configure(Status.Registered)
.PermitIf(RatingTrigger, Status.Submitted, () => RatingTrigger.Guard(currentRating), RatingTrigger.GuardDescription)
.PermitIf(RatingTrigger, Status.Denied, () => RatingTrigger.Guard(currentRating), RatingTrigger.GuardDescription);
var list = _sm.PermittedTriggers;
foreach (var item in list)
{
if (item.GetType().Equals(typeof(RatingTrigger)))
{
Console.WriteLine(((RatingTrigger)item).GuardDescription);
}
else
Console.WriteLine(item);
}
}
private static bool evaluate()
{
return true;
}
}
public abstract class Trigger
{
public abstract bool Guard(object something);
}
public class RatingTrigger : Trigger
{
public string GuardDescription = "This Guard evaluaties the current rating. Retuns true if good rating, false if bad rating";
public override bool Guard(object rating)
{
return (((int)rating) > 90);
}
}
背景:
我有相同的 Trigger
与 PermitIf
定义的互斥 guard
条件,这将导致根据这些条件转换到不同的状态。
守卫已 Descriptions
定义,它们在导出的 DOT 图表中很好地显示在括号中,因此很容易理解。
machine
.Configure(Status.Registered)
.PermitIf(Activity.Submit, Status.Submitted, IsGoodRating, "Is good rating")
.PermitIf(Activity.Submit, Status.Denied, IsBadRating, "Is bad rating")
现在,我知道 machine.PermittedTriggers
属性 returns 允许触发器处于当前状态,这很好,但问题来了。
问题:
在这种情况下,有没有办法获得 PermittedTriggers
的列表以及状态 Registered
的相应保护条件?
我想你可以做这样的事情,但是......我不知道它有多大帮助:
class Program
{
enum Status { Registered, Submitted, Denied }
static void Main(string[] args)
{
int currentRating = 91;
RatingTrigger RatingTrigger = new RatingTrigger();
StateMachine<Status, Trigger> _sm = new StateMachine<Status, Trigger>(Status.Registered);
_sm.Configure(Status.Registered)
.PermitIf(RatingTrigger, Status.Submitted, () => RatingTrigger.Guard(currentRating), RatingTrigger.GuardDescription)
.PermitIf(RatingTrigger, Status.Denied, () => RatingTrigger.Guard(currentRating), RatingTrigger.GuardDescription);
var list = _sm.PermittedTriggers;
foreach (var item in list)
{
if (item.GetType().Equals(typeof(RatingTrigger)))
{
Console.WriteLine(((RatingTrigger)item).GuardDescription);
}
else
Console.WriteLine(item);
}
}
private static bool evaluate()
{
return true;
}
}
public abstract class Trigger
{
public abstract bool Guard(object something);
}
public class RatingTrigger : Trigger
{
public string GuardDescription = "This Guard evaluaties the current rating. Retuns true if good rating, false if bad rating";
public override bool Guard(object rating)
{
return (((int)rating) > 90);
}
}