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); } }
private static void FillStartMessages(Type[] startMessages, SagaDescriptor descriptor) { foreach (var startMessage in startMessages) { descriptor.AddStartMessage(startMessage); } }
private static void FillCommands <T>(Saga <T> saga, SagaDescriptor descriptor) where T : class, ISagaState { foreach (var cmdType in saga.DispatchedCommands) { descriptor.AddProduceCommandMessage(cmdType); } }
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); }