Пример #1
0
 private static void FillAcceptMessages <T>(Saga <T> saga, SagaDescriptor descriptor) where T : class, ISagaState
 {
     foreach (var messageBinder in saga.AcceptedMessageMap)
     {
         descriptor.AddAcceptedMessage(messageBinder.MessageType, messageBinder.CorrelationField);
     }
 }
Пример #2
0
 private static void FillStartMessages(Type[] startMessages, SagaDescriptor descriptor)
 {
     foreach (var startMessage in startMessages)
     {
         descriptor.AddStartMessage(startMessage);
     }
 }
Пример #3
0
 private static void FillCommands <T>(Saga <T> saga, SagaDescriptor descriptor) where T : class, ISagaState
 {
     foreach (var cmdType in saga.DispatchedCommands)
     {
         descriptor.AddProduceCommandMessage(cmdType);
     }
 }
Пример #4
0
        public static ISagaDescriptor CreateDescriptor <TSaga, TSagaData>(this TSaga saga, params Type[] startMessages)
            where TSagaData : class, ISagaState
            where TSaga : Saga <TSagaData>
        {
            if (!startMessages.Any())
            {
                throw new StartMessagesMissedException();
            }

            var descriptor = new SagaDescriptor(typeof(ISagaInstance <TSaga, TSagaData>), typeof(SagaDataAggregate <TSagaData>), typeof(TSaga));

            FillAcceptMessages(saga, descriptor);
            FillCommands(saga, descriptor);
            FillStartMessages(startMessages, descriptor);

            return(descriptor);
        }