Пример #1
0
        private void Register <TEvent>(Type eventStreamHandlerType, Func <long, TEvent, CancellationToken, Task> eventHandlerMethodInvocation)
            where TEvent : class, IEvent
        {
            if (!_projectionBuildersByEventType.TryGetValue(eventStreamHandlerType, out var projectionBuildersForEventStreamHandler))
            {
                projectionBuildersForEventStreamHandler = new ProjectionBuildersByEventType();
                _projectionBuildersByEventType.TryAdd(eventStreamHandlerType, projectionBuildersForEventStreamHandler);
            }

            if (!projectionBuildersForEventStreamHandler.TryGetValue(typeof(TEvent), out var projectionBuildersForEvent))
            {
                projectionBuildersForEvent = new List <Func <long, IEvent, CancellationToken, Task> >();
                projectionBuildersForEventStreamHandler.Add(typeof(TEvent), projectionBuildersForEvent);
            }

            projectionBuildersForEvent.Add((streamPosition, @event, stoppingToken) => eventHandlerMethodInvocation(streamPosition, (TEvent)@event, stoppingToken));
        }
Пример #2
0
 public EventHandler(ILogger <EventHandler <TEventStream> > logger, IProjectionStore <Projections.EventHandlerState.Projection> eventHandlerStateStore, IProjectionBuilderRegistrar projectionBuilderRegistrar)
 {
     _logger = logger;
     _eventHandlerStateStore        = eventHandlerStateStore;
     _projectionBuildersByEventType = projectionBuilderRegistrar.Get(typeof(TEventStream));
 }