dotnet-state-machine / stateless

A simple library for creating state machines in C# code
Other
5.41k stars 746 forks source link

Add overloads to CanFire to support trigger parameters #574

Closed mclift closed 1 month ago

mclift commented 1 month ago

To address #550

This PR adds support for trigger parameters to CanFire. Example:

const int argument0 = 101;
var sm = new StateMachine<string, string>("StateA");
var valueTrigger = sm.SetTriggerParameters<int>("MyTrigger");
sm.Configure("StateA").PermitIf(valueTrigger, "StateB", i => i > 100);

Console.WriteLine($"CanFire with {valueTrigger.Trigger} " +
    $"on state {sm.State} " +
    $"with parameter value {argument0} " +
    $"returns: {sm.CanFire(valueTrigger, argument0)}.");

// Output:
// CanFire with MyTrigger on state StateA with parameter value 101 returns: True.

This PR does not change the existing behavior of bool CanFire(TTrigger) nor of bool CanFire(TTrigger, out ICollection<string>), but xmldoc remarks have been added to clarify that they may not work as expected when used with parameterized triggers.

crozone commented 1 month ago

LGTM!