Termin36.LiteStateMachine 0.3.1

dotnet add package Termin36.LiteStateMachine --version 0.3.1
                    
NuGet\Install-Package Termin36.LiteStateMachine -Version 0.3.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Termin36.LiteStateMachine" Version="0.3.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Termin36.LiteStateMachine" Version="0.3.1" />
                    
Directory.Packages.props
<PackageReference Include="Termin36.LiteStateMachine" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Termin36.LiteStateMachine --version 0.3.1
                    
#r "nuget: Termin36.LiteStateMachine, 0.3.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Termin36.LiteStateMachine@0.3.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Termin36.LiteStateMachine&version=0.3.1
                    
Install as a Cake Addin
#tool nuget:?package=Termin36.LiteStateMachine&version=0.3.1
                    
Install as a Cake Tool

О проекте

Проект формирует библиотеку для построения машин конечных состояний (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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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