2019-08-16 11:47:57 +02:00
|
|
|
|
using System;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using ExampleLib;
|
|
|
|
|
using SimpleInjector;
|
|
|
|
|
using Tapeti;
|
|
|
|
|
using Tapeti.DataAnnotations;
|
|
|
|
|
using Tapeti.Default;
|
|
|
|
|
using Tapeti.Flow;
|
|
|
|
|
using Tapeti.SimpleInjector;
|
|
|
|
|
|
|
|
|
|
namespace _03_FlowRequestResponse
|
|
|
|
|
{
|
|
|
|
|
public class Program
|
|
|
|
|
{
|
|
|
|
|
public static void Main(string[] args)
|
|
|
|
|
{
|
|
|
|
|
var container = new Container();
|
|
|
|
|
var dependencyResolver = new SimpleInjectorDependencyResolver(container);
|
|
|
|
|
|
|
|
|
|
container.Register<ILogger, ConsoleLogger>();
|
|
|
|
|
|
|
|
|
|
var helper = new ExampleConsoleApp(dependencyResolver);
|
|
|
|
|
helper.Run(MainAsync);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
internal static async Task MainAsync(IDependencyResolver dependencyResolver, Func<Task> waitForDone)
|
|
|
|
|
{
|
|
|
|
|
var config = new TapetiConfig(dependencyResolver)
|
|
|
|
|
.WithDataAnnotations()
|
|
|
|
|
.WithFlow()
|
|
|
|
|
.RegisterAllControllers()
|
|
|
|
|
.Build();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
using (var connection = new TapetiConnection(config))
|
|
|
|
|
{
|
|
|
|
|
// Must be called before using any flow. When using a persistent repository like the
|
|
|
|
|
// SQL server implementation, you can run any required update scripts (for example, using DbUp)
|
|
|
|
|
// before calling this Load method.
|
|
|
|
|
// Call after creating the TapetiConnection, as it modifies the container to inject IPublisher.
|
|
|
|
|
await dependencyResolver.Resolve<IFlowStore>().Load();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await connection.Subscribe();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var flowStarter = dependencyResolver.Resolve<IFlowStarter>();
|
|
|
|
|
|
2019-08-17 14:19:29 +02:00
|
|
|
|
var startData = new SimpleFlowController.StartData
|
2019-08-16 11:47:57 +02:00
|
|
|
|
{
|
|
|
|
|
RequestStartTime = DateTime.Now,
|
|
|
|
|
Amount = 1
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
2019-08-17 14:19:29 +02:00
|
|
|
|
await flowStarter.Start<SimpleFlowController, SimpleFlowController.StartData>(c => c.StartFlow, startData);
|
|
|
|
|
await flowStarter.Start<ParallelFlowController>(c => c.StartFlow);
|
2019-08-16 11:47:57 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Wait for the controller to signal that the message has been received
|
|
|
|
|
await waitForDone();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|