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);
        }
Example #2
0
        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();
        }