Termin36.LiteStateMachine
0.3.1
dotnet add package Termin36.LiteStateMachine --version 0.3.1
NuGet\Install-Package Termin36.LiteStateMachine -Version 0.3.1
<PackageReference Include="Termin36.LiteStateMachine" Version="0.3.1" />
<PackageVersion Include="Termin36.LiteStateMachine" Version="0.3.1" />
<PackageReference Include="Termin36.LiteStateMachine" />
paket add Termin36.LiteStateMachine --version 0.3.1
#r "nuget: Termin36.LiteStateMachine, 0.3.1"
#:package Termin36.LiteStateMachine@0.3.1
#addin nuget:?package=Termin36.LiteStateMachine&version=0.3.1
#tool nuget:?package=Termin36.LiteStateMachine&version=0.3.1
О проекте
Проект формирует библиотеку для построения машин конечных состояний (State Machine), с помощью которых возможно строить сложную модель поведения с реакцией на воздействия. Ценность библиотеки в простоте и независимости от окружения, благодаря чему ее можно без сомнений интегрировать например в слой домена (DDD)
Текущая версия: v0.3.0 (2025-11-28)
Более подробно можно ознакомиться в Wiki По вопросам и развитию ходить сюда
Возможности ядра
- Хранение состояния во внешнем хранилище
- Задание обработчика генерации собственных ошибок (OnFailHandler)
- Журнал транзакций
- Обработка событий
- Активация и деактивация состояния (OnActivate и OnDeactivate)
- Вход и выход из состояния (OnEntry и OnExit)
- Вход и выход из состояния с фильтром по триггеру (OnEntryFrom и OnExitFrom)
- Обработка пользовательского события на срабатывание триггера (OnAction, OnActionIf, OnActionIfInverted)
- Переходы между состояниями
- Без проверки условий
- Переход с известным конечным состоянием (ChangeState)
- Переход с определением конечного состояния с помощью функции (ChangeStateDynamic)
- Игнорирование перехода (NotChangeState)
- С проверкой условия
- Переход с известным конечным состоянием с проверкой условия (ChangeStateIf, ChangeStateIfInverted)
- Переход с определением конечного состояния с помощью функции с проверкой условия (ChangeStateDynamicIf, ChangeStateDynamicIfInverted)
- Игнорирование перехода с условием (NotChangeStateIf, NotChangeStateIfInverted)
- Группировка триггеров с общим Guard
- Группировка нескольких триггеров с общим Guard выражением (When-Then)
- Цепочка условий с альтернативными ветками (When-ElseIf-Else)
- Инвертированные Guard в цепочках (WhenInverted, ElseIfInverted) - инвертируют условие (если условие false, Guard считается выполненным)
- Вложенные When блоки для создания сложной логики
- Последовательная проверка условий: первое подходящее условие останавливает проверку остальных
- Глобальные обработчики триггеров (v0.3.0)
- Обработчики, работающие во всех состояниях независимо от текущего состояния
- OnGlobalAction, OnGlobalChangeState, OnGlobalChangeStateDynamic, OnGlobalNotChangeState
- Поддержка Guard условий для глобальных обработчиков (OnGlobalActionIf, OnGlobalChangeStateIf и т.д.)
- Локальные behaviors имеют приоритет над глобальными
- Без проверки условий
- Иерархия состояний
- Составные состояния с подсостояниями (AddSubState, SetInitialSubState)
- Параллельные регионы
- Регионы для параллельного выполнения (SetRegion, AddParallelRegion)
- Разделение и объединение потоков (Split, Join)
- Автоматическое разделение и объединение (SetAutoSplit, SetAutoJoin)
Пример использования
Устанавливаем пакет
dotnet add package Termin36.LiteStateMachine --version x.x.x
Используем
StateMachine<State, Trigger> stateMachine = new StateMachine<State, Trigger>(State.StateA);
stateMachine.Configuration(State.StateA)
.OnAction(_triggerRegister, RegistrationPeople)
.ChangeState(_triggerMove, State.StateMoving);
stateMachine.Configuration(State.StateMoving)
.ChangeStateIf(_triggerRegister, State.StateA, IsAllowRegistration, "Регистрировать пользователей сейчас нельзя");
stateMachine.ValidateStateMachine();
await stateMachine.Do(_triggerRegister, new People("Иванов", "Иван"));
await stateMachine.Do(_triggerMove, null);
await stateMachine.Do(_triggerRegister, new People("Петров", "Петр")); // сработает исключение, так как обработать нельзя
Более подробно можно ознакомиться в Wiki
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net7.0
- System.Linq.Async (>= 6.0.1)
- System.Linq.Async.Queryable (>= 6.0.1)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Termin36.LiteStateMachine:
| Package | Downloads |
|---|---|
|
Termin36.TelegramDialogs
Пакет служит для целей упрощения создания диалогов в Телеграм боте. Основан на машине состояний |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.3.1 | 611 | 11/28/2025 |
| 0.2.1 | 350 | 11/17/2025 |
| 0.2.0 | 797 | 11/17/2025 |
| 0.1.11 | 1,012 | 10/29/2024 |
| 0.1.10 | 181 | 10/28/2024 |
| 0.1.9 | 184 | 10/23/2024 |
| 0.1.8 | 156 | 10/23/2024 |
| 0.1.7 | 245 | 2/29/2024 |
| 0.1.6 | 203 | 2/7/2024 |
| 0.1.5 | 197 | 2/7/2024 |
| 0.1.4 | 197 | 2/7/2024 |
| 0.1.3 | 188 | 2/7/2024 |
| 0.1.2 | 188 | 2/7/2024 |
| 0.1.1 | 243 | 2/6/2024 |
| 0.1.1-alpha | 184 | 2/5/2024 |