Пример #1
0
        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);
            }
        }
Пример #2
0
 public Engine(IServiceProvider serviceProvider, StateMachineDefinition <TStateMachine> stateMachineDefinition)
 {
     _serviceProvider        = serviceProvider;
     _stateMachineDefinition = stateMachineDefinition;
 }
Пример #3
0
 public StateBuilder(StateMachineDefinition stateMachineDefinition)
 {
     _stateMachineDefintion = stateMachineDefinition;
 }