/
vshmidt
/
masstransit
Обзор
Документация
Войти
/
vshmidt
/
masstransit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/MassTransit/SagaStateMachine/TransitionExtensions.cs
143 строки
6 KB
Chris Patterson
Huge push towards optimization on startup, state machines, type discovery, caching, and the consume pipeline. Rebuilt the dispatch filter as a consume context filter for message type dispatch.
27 мар 2024, 02:43
27 мар 2024, 02:43
c17b1de
Код
Авторство
О чём код?
namespace MassTransit { using System; using SagaStateMachine; public static class TransitionExtensions { /// <summary> /// Transition the state machine to the specified state /// </summary> public static EventActivityBinder<TSaga> TransitionTo<TSaga>(this EventActivityBinder<TSaga> source, State toState) where TSaga : class, SagaStateMachineInstance { State<TSaga> state = source.StateMachine.GetState(toState.Name); var activity = new TransitionActivity<TSaga>(state, source.StateMachine.Accessor); return source.Add(activity); } /// <summary> /// Transition the state machine to the specified state in response to an exception /// </summary> /// <typeparam name="TSaga"></typeparam> /// <typeparam name="TException"></typeparam> /// <param name="source"></param> /// <param name="toState"></param> /// <returns></returns> public static ExceptionActivityBinder<TSaga, TException> TransitionTo<TSaga, TException>(this ExceptionActivityBinder<TSaga, TException> source, State toState) where TSaga : class, SagaStateMachineInstance where TException : Exception { State<TSaga> state = source.StateMachine.GetState(toState.Name); var activity = new TransitionActivity<TSaga>(state, source.StateMachine.Accessor); var compensateActivity = new ExecuteOnFaultedActivity<TSaga>(activity); return source.Add(compensateActivity); } /// <summary> /// Transition the state machine to the specified state /// </summary> public static EventActivityBinder<TSaga, TMessage> TransitionTo<TSaga, TMessage>(this EventActivityBinder<TSaga, TMessage> source, State toState) where TSaga : class, SagaStateMachineInstance where TMessage : class { State<TSaga> state = source.StateMachine.GetState(toState.Name); var activity = new TransitionActivity<TSaga>(state, source.StateMachine.Accessor); return source.Add(activity); } /// <summary> /// Transition the state machine to the specified state in response to an exception /// </summary> /// <typeparam name="TSaga"></typeparam> /// <typeparam name="TException"></typeparam> /// <typeparam name="TMessage"></typeparam> /// <param name="source"></param> /// <param name="toState"></param> /// <returns></returns> public static ExceptionActivityBinder<TSaga, TMessage, TException> TransitionTo<TSaga, TMessage, TException>( this ExceptionActivityBinder<TSaga, TMessage, TException> source, State toState) where TSaga : class, SagaStateMachineInstance where TException : Exception where TMessage : class { State<TSaga> state = source.StateMachine.GetState(toState.Name); var activity = new TransitionActivity<TSaga>(state, source.StateMachine.Accessor); var compensateActivity = new ExecuteOnFaultedActivity<TSaga>(activity); return source.Add(compensateActivity); } /// <summary> /// Transition the state machine to the Final state /// </summary> public static EventActivityBinder<TSaga, TMessage> Finalize<TSaga, TMessage>(this EventActivityBinder<TSaga, TMessage> source) where TSaga : class, SagaStateMachineInstance where TMessage : class { State<TSaga> state = source.StateMachine.GetState(source.StateMachine.Final.Name); var activity = new TransitionActivity<TSaga>(state, source.StateMachine.Accessor); return source.Add(activity); } /// <summary> /// Transition the state machine to the Final state /// </summary> public static EventActivityBinder<TSaga> Finalize<TSaga>(this EventActivityBinder<TSaga> source) where TSaga : class, SagaStateMachineInstance { State<TSaga> state = source.StateMachine.GetState(source.StateMachine.Final.Name); var activity = new TransitionActivity<TSaga>(state, source.StateMachine.Accessor); return source.Add(activity); } /// <summary> /// Transition the state machine to the Final state /// </summary> public static ExceptionActivityBinder<TSaga, TMessage, TException> Finalize<TSaga, TMessage, TException>( this ExceptionActivityBinder<TSaga, TMessage, TException> source) where TSaga : class, SagaStateMachineInstance where TException : Exception where TMessage : class { State<TSaga> state = source.StateMachine.GetState(source.StateMachine.Final.Name); var activity = new TransitionActivity<TSaga>(state, source.StateMachine.Accessor); var compensateActivity = new ExecuteOnFaultedActivity<TSaga>(activity); return source.Add(compensateActivity); } /// <summary> /// Transition the state machine to the Final state /// </summary> public static ExceptionActivityBinder<TSaga, TException> Finalize<TSaga, TException>(this ExceptionActivityBinder<TSaga, TException> source) where TSaga : class, SagaStateMachineInstance where TException : Exception { State<TSaga> state = source.StateMachine.GetState(source.StateMachine.Final.Name); var activity = new TransitionActivity<TSaga>(state, source.StateMachine.Accessor); var compensateActivity = new ExecuteOnFaultedActivity<TSaga>(activity); return source.Add(compensateActivity); } } }