State Machine Frameworks for .NET

17,816

Solution 1

Depending on your exact requirements you might find the State Machine Compiler is sufficient for implementing the GoF "State" pattern. It can generate C# as well as dot which can be transformed into several image formats using Graphviz. I've used it on a previous project and found it sufficient for generating a 'simple' state machine. I hope this helps.

Solution 2

Two great state machines for .NET

  • Stateless - Create state machines and lightweight state machine-based workflows directly in .NET code
  • Automatonymous - A state machine library for .Net - allows you to write fluent style state machines

Solution 3

Take a look at NState

https://github.com/benaston/NState

https://nuget.org/packages/NState/.

Disclaimer: I maintain it.

Solution 4

I maintain an open-source project which implements (among other things) a generic finite state machine for .NET. It is built on top of QuickGraph, so you get many graph-analysis algorithms for free. See this page for more information.

Solution 5

You might consider the North State Framework in C#. Although it is not open source, it is relatively inexpensive to license. It is the only framework that I know of that allows reuse through state machine composition and inheritance. In other words, you can inherit from a base state machine with only a few lines of code, and add states, transitions, actions, etc. You can also take an existing state machine class and "plug it into" another state machine. You won't believe how much easier it is to implement and work with state machines using this framework, relative to GOF or other patterns.

Share:
17,816
Andy White
Author by

Andy White

Software developer from Colorado, USA.

Updated on June 18, 2022

Comments

  • Andy White
    Andy White about 2 years

    We have a system at my work that is basically a message-driven state machine. It takes in a variety of types of messages, looks up some context/state based on the message, then decides what to do, based on the message and the current state. Normally the result is a message being sent out of the system.

    Are there any good open-source frameworks for implementing a state machine in .NET? I've looked into the latest release of Windows Workflow, and it seems like it would be a good option; however, I have some concerns about the default persistence mechanisms (we need to report off the state transition data), testability, and the fact that the WF team is re-architecting the framework as we speak (supposedly).

    Instead of WF, I'm thinking of trying to implement a plain-old GoF "State" pattern, and using Spring.NET to wire everything together. Is there anything out there that already does this, or something similar?