private static void RegisterStateMachineDependencies <TStateMachine>( IServiceCollection services, Func <StateMachineBuilder, StateMachineDefinition> definitionBuilder) where TStateMachine : StateMachine <TStateMachine> { StateMachineDefinition <TStateMachine> definition = (StateMachineDefinition <TStateMachine>)definitionBuilder(new StateMachineBuilder <TStateMachine>()); services.AddSingleton(definition); services.AddScoped <Engine <TStateMachine> >(); foreach (var stateMachineComponent in definition.Values .Select(transition => transition.PreconditionType is null ? new[] { transition.NewStateType } : new[] { transition.NewStateType, transition.PreconditionType }) .SelectMany(types => types) .Distinct()) { services.AddScoped(stateMachineComponent); } }
public Engine(IServiceProvider serviceProvider, StateMachineDefinition <TStateMachine> stateMachineDefinition) { _serviceProvider = serviceProvider; _stateMachineDefinition = stateMachineDefinition; }
public StateBuilder(StateMachineDefinition stateMachineDefinition) { _stateMachineDefintion = stateMachineDefinition; }