/// <summary> /// Constructor. /// </summary> /// <param name="configService">A collection of library configuration settings.</param> /// <param name="eventHandlerService">A collection of domain event handlers.</param> /// <param name="projectionHandlerService">A collection of domain model projection handlers.</param> public EventStreamProcessor(EventStreamConfigService configService, DomainEventHandlerService eventHandlerService, ProjectionHandlerService projectionHandlerService) { if (!configService.ContainsConfiguration <TDomainModelRoot>()) { throw new Exception($"No configuration registered for domain model {typeof(TDomainModelRoot).Name}"); } this.eventHandlerService = eventHandlerService; this.projectionHandlerService = projectionHandlerService; IsInitialized = false; config = configService.GetConfiguration <TDomainModelRoot>(); logger = new DebugLogger <EventStreamProcessor <TDomainModelRoot> >(configService.LoggerFactory); logger.LogDebug($"Created {nameof(EventStreamProcessor<TDomainModelRoot>)} for domain model root {typeof(TDomainModelRoot).Name}"); }
/// <summary> /// Adds a configuration object to the collection. /// </summary> /// <typeparam name="TDomainModelRoot">The domain model to which this configuration applies.</typeparam> /// <param name="config">The library configuration.</param> public void AddConfiguration <TDomainModelRoot>(EventStreamDotNetConfig config) where TDomainModelRoot : class, IDomainModelRoot, new() { if (string.IsNullOrWhiteSpace(config.Database.ConnectionString) || string.IsNullOrWhiteSpace(config.Database.EventTableName) || string.IsNullOrWhiteSpace(config.Database.SnapshotTableName)) { throw new ArgumentException("Missing one or more required database configuration values"); } var domainType = typeof(TDomainModelRoot); if (cache.ContainsKey(domainType)) { return; } cache.Add(domainType, config); logger.LogDebug($"Registering configuration for domain model {domainType.Name}"); }