public static IHostBuilder AddEventSubscription <TSubscription>( this IHostBuilder builder, Action <IEventSubscriptionBuilder> subscriptionConfigurator = null) where TSubscription : class, IEventSubscription { var subscriptionBuilder = new EventSubscriptionBuilder(); subscriptionConfigurator?.Invoke(subscriptionBuilder); builder.ConfigureServices(services => { services .AddSingleton <IEventSubscription, TSubscription>() .AddSingleton <TSubscription>() .AddHostedService <EventSubscriptionHostingService <TSubscription> >() .AddSingleton(typeof(IEventSubscriptionBuilder), subscriptionBuilder) .AddSingleton(typeof(IHandlerResolver), subscriptionBuilder); if (subscriptionBuilder.CheckpointLoaderType != null) { services.AddScoped(typeof(ICheckpointLoader), subscriptionBuilder.CheckpointLoaderType); } else { services.AddSingleton(subscriptionBuilder.CheckpointLoader); } }); return(builder); }
public EventSubscriptionTests() : base(false) { _waitHandle = new AutoResetEvent(false); var subscriptionBuilder = new EventSubscriptionBuilder(); subscriptionBuilder.As <IEventSubscriptionBuilder>() .On <TestCreated>() .HandleAsync(e => { _eventCounter++; return(Task.CompletedTask); }) .On <TestDone>() .HandleAsync(e => { _eventCounter++; _waitHandle.Set(); return(Task.CompletedTask); }) .RetryOnError((e, ex) => false); ServiceCollection .AddSingleton <IEventSubscription, NEventStoreEventSubscription>() .AddSingleton <NEventStoreEventSubscription>() .AddSingleton(typeof(IEventSubscriptionBuilder), subscriptionBuilder) .AddSingleton(typeof(IHandlerResolver), subscriptionBuilder) .AddSingleton(subscriptionBuilder.CheckpointLoader); _eventSubscription = Services.GetRequiredService <IEventSubscription>(); _eventSubscription.StartAsync().GetAwaiter().GetResult(); }