千家信息网

.NET Core上的状态机库Stateless 3.0怎么理解

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,今天就跟大家聊聊有关.NET Core上的状态机库Stateless 3.0怎么理解,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Statel
千家信息网最后更新 2026年11月01日.NET Core上的状态机库Stateless 3.0怎么理解

今天就跟大家聊聊有关.NET Core上的状态机库Stateless 3.0怎么理解,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

Stateless是一个基于C#,创建状态机的简单库,最新版本支持.NET Core 1.0。其实现方式并不是通过.NET Core,而是通过写入.NET Standard实现的。就像Android平台上API级别抽象出许多底层版本的Android,.NET Standard是一组所有.NET平台上都必须实现的API。

更令开发者高兴的是,Stateless 3.0基于.NET Standard 1.0编写,是一个被广泛使用和最具兼容性的标准版本,几乎可以运行在任何地方,从Windows平台上的.NET Framework、.NET Core到Mac,和Windows应用商店以及所有的移动平台。

特征:

支持大多数标准状态机构造:

  • 支持任何.NET类型(数字、字符串、枚举等)状态和触发器;

  • 分层状态;

  • 状态的进入/退出事件;

  • Guard子句以支持条件转换;

  • 内省。

与此同时,还提供一些有用的扩展:

  • 支持外部的状态存储(例如:由ORM跟踪属性);

  • 参数化触发器;

  • 可重入状态;

  • 支持DOT格式图导出。

使用Stateless创建一个简单的状态机

下面来看几个代码示例。先描述一些有限状态,例如一个枚举类型和一些用于改变状态的有限"触发器",就像开发一样,来启动和关闭状态以及进行触发器切换。


另一个更加实用的例子是Bug Tracker,源码在GitHub上。下面是一个Bug和触发器状态,引起状态改变:

enum State { Open, Assigned, Deferred, Resolved, Closed }enum Trigger { Assign, Defer, Resolve, Close }

下面进行状态初始化,定义StateMachine,如果你愿意,可以在状态触发时传递参数。例如,如果你使用Assign触发Bug,可以传入"Scott",这样该Bug就会进入Assigned状态--分配给Scott。

State _state = State.Open;StateMachine _machine;StateMachine.TriggerWithParameters _assignTrigger;string _title;string _assignee;

在这个例子中,Bug构造函数使用一个流畅接口的状态机,该接口读得相当不错。

public Bug(string title){    _title = title;    _machine = new StateMachine(() => _state, s => _state = s);    _assignTrigger = _machine.SetTriggerParameters(Trigger.Assign);    _machine.Configure(State.Open)        .Permit(Trigger.Assign, State.Assigned);  
_machine.Configure(State.Assigned) .SubstateOf(State.Open) .OnEntryFrom(_assignTrigger, assignee => OnAssigned(assignee)) .PermitReentry(Trigger.Assign) .Permit(Trigger.Close, State.Closed) .Permit(Trigger.Defer, State.Deferred) .OnExit(() => OnDeassigned());
_machine.Configure(State.Deferred) .OnEntry(() => _assignee = null) .Permit(Trigger.Assign, State.Assigned);}

例如,当状态打开时,可以进行分配,但是,由于它是被写入的(你可以改变),所以你无法关闭一个处于开放状态并且没有分配的Bug。

当Bug被分配时,你可以关闭,延迟或重新分配。这是PermitReentry()。另外,注意一下,Assigned是一个子状态。

你可以有状态地改变触发事件,这些事件可以根据您的个人设置采取行动。

void OnAssigned(string assignee){    if (_assignee != null && assignee != _assignee)        SendEmailToAssignee("Don't forget to help the new employee.");    _assignee = assignee;    SendEmailToAssignee("You own it.");}void OnDeassigned(){    SendEmailToAssignee("You're off the hook.");}void SendEmailToAssignee(string message){    Console.WriteLine("{0}, RE {1}: {2}", _assignee, _title, message);}

拥有一个好的状态机库,例如Stateless,可以让你快速地模拟状态。能否分享一下,你在项目中使用的状态机是什么样子的?

看完上述内容,你们对.NET Core上的状态机库Stateless 3.0怎么理解有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

状态 支持 触发器 分配 平台 机库 事件 内容 版本 例子 参数 接口 有限 标准 类型 开发 不错 流畅 高兴 与此同时 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网金融科技 中关村互联网 科技集团 深圳恒合互联网络科技有限公司 互联网科技财经 盈实互联网科技 与互联网科技公司 北京互联网科技公司 新浪科技互联网 金融科技和互联网金融 银川新华互联网科技学校地址 剑昆互联网络科技有限公司临桂 互联网科技大奖都有哪些公司 米聚互联网科技南京有限公司排面 本届互联网博览会上的黑科技 徐州市互联网科技有限公司 产业互联网科技服务公司 互联网科技融合创新 工业互联网科技创业 云鲸互联网络科技有限公司 伍佰万互联网科技是干嘛的 广州万易互联网科技有限公司 平安科技 互联网 苏州大垚互联网科技 国外互联网科技网站 福州新华互联网科技学校 知乎 电子科技大学互联网创业大赛 广州新华互联网科技学校电竞方面 恒生互联网科技业指数调整周期 下一代互联网重大应用科技园 米泉互联网科技专业怎么样
0