Fan-out
If you want to group the awaiting subscribers, you can use FanOutInterceptor
For example, in the following example, commands are delivered to groupA and groupA in parallel, but in sequential within each group.
var fanOut = new FanOutInterceptor();
var groupA = new Router(CommandOrdering.Sequential)
var groupB = new Router(CommandOrdering.Sequential);
fanOut.Add(groupA);
fanOut.Add(groupB);
Router.Default.Filter(fanOut);
// Map routes per group
presenter1.MapTo(groupA);
presenter2.MapTo(groupA);
presente3.MapTo(groupB);
presente4.MapTo(groupB);
With Microsoft.Extensions.DependencyInjection
builder.AddVitalRouter(routing =>
{
routing
.FanOut(groupA =>
{
groupA.Ordering = CommandOrdering.Sequential;
groupA.Map<Presenter1>();
groupA.Map<Presenter2>();
})
.FanOut(groupB =>
{
groupB.Ordering = CommandOrdering.Sequential;
groupB.Map<Presenter3>();
groupB.Map<Presenter4>();
})
});
With VContainer (Unity)
public class SampleLifetimeScope : LifetimeScope
{
public override void Configure(IContainerBuilder builder)
{
builder.RegisterVitalRouter(routing =>
{
routing
.FanOut(groupA =>
{
groupA.Ordering = CommandOrdering.Sequential;
groupA.Map<Presenter1>();
groupA.Map<Presenter2>();
})
.FanOut(groupB =>
{
groupB.Ordering = CommandOrdering.Sequential;
groupB.Map<Presenter3>();
groupB.Map<Presenter4>();
})
});
}
}