BlackMali.StateMachine
1.0.0
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package BlackMali.StateMachine --version 1.0.0
NuGet\Install-Package BlackMali.StateMachine -Version 1.0.0
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="BlackMali.StateMachine" Version="1.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add BlackMali.StateMachine --version 1.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: BlackMali.StateMachine, 1.0.0"
#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.
// Install BlackMali.StateMachine as a Cake Addin
#addin nuget:?package=BlackMali.StateMachine&version=1.0.0
// Install BlackMali.StateMachine as a Cake Tool
#tool nuget:?package=BlackMali.StateMachine&version=1.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
StateMachine
Simple state machine implementation in C# (.NET 6).
Advantages:
- DI ready
- Async Pattern
- Works without constants and enums
- Builder for state machine creation
- Configuration of states and transitions
- Strict and open transitions
- more than 95% code coverage
NuGet
TBD
Configuration
var builder = new StateMachineBuilder();
// OR
var builder = new StateMachineBuilder(new StateMachineConfig(), new StateProvider());
// Every state needs transitions
builder.UseStrictMode();
builder.AddBeginState(new LockState())
.AddStartTransition();
.AddInStateTransition()
.AddTransition<UnLockState>()
.AddTransition<EndState>();
builder.AddState(new UnLockState())
.AddInStateTransition()
.AddTransition<LockState>()
.AddTransition<EndState>();
// Create state machine
var machine = builder.Build();
State change
await machine.Transmit<LockState>();
// OR with Event
await machine.Transmit<LockState>(new StateMachineEvent());
// Posts an event to the current status
await machine.Post(new StateMachineEvent());
State implementation
internal class LockState
: State // you can also use the interface IState without overrides
{
// optional:
public override async Task OnEnter(IStateMachineContext context)
{
await base.OnEnter(context);
Console.WriteLine("Please insert coin");
}
// optional:
public override async Task<IState?> OnTransmitted(IStateMachineContext context, StateMachineEvent @event)
{
var unLockEvent = @event as UnLockEvent;
if (unLockEvent == null)
return null;
// No state change...
if (unLockEvent.Coin == null)
return null;
// State change to UnLockState
return await context.GetState<UnLockState>();
}
// optional:
public override async Task OnExit(IStateMachineContext context)
{
// Do something...
await Task.CompletedTask;
}
}
Used Packages
- XUnit
- XUnit.Runner.VisualStudio
- Autofac.Extras.Moq
- Moq
- Coverlet.Collector
Implemented with Microsoft Visual Studio Community 2022
Used extensions
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. 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. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- No dependencies.
-
net6.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on BlackMali.StateMachine:
Package | Downloads |
---|---|
BlackMali.StateMachine.Autofac
Autofac package for state machines with async pattern (.net Standard 2.0 and .net 6) |
GitHub repositories
This package is not used by any popular GitHub repositories.
First release