public OzzyDomainOptionsBuilder <TDomain> AddHandler <THandler>(Func <IServiceProvider, THandler> handlerFactory = null) where THandler : class, IDomainEventsHandler { _domainBuilder.Services.TryAddTypeSpecificSingleton <TDomain, THandler>(handlerFactory); _domainBuilder.Services.TryAddTypeSpecificSingleton <TDomain, IDomainEventsProcessor>(sp => { var options = sp.GetService <IExtensibleOptions <TDomain> >(); var handler = sp.GetTypeSpecificService <TDomain, THandler>(); var eventsReader = sp.GetTypeSpecificService <TDomain, IPeristedEventsReader>(); var faultHandler = sp.GetService <IDomainEventsFaultHandler>(); var checkpointManager = new SimpleChekpointManager(eventsReader); return(new DomainEventsProcessor(handler, checkpointManager, faultHandler)); }); return(this); }
public OzzyDomainOptionsBuilder <TDomain> AddSagaProcessor <TSaga>(Func <IServiceProvider, TSaga> sagaFactory = null) where TSaga : SagaBase { _domainBuilder.Services.TryAddTypeSpecificTransient <TDomain, TSaga>(sagaFactory); _domainBuilder.Services.TryAddTypeSpecificSingleton <TDomain, IDomainEventsProcessor>(sp => { var options = sp.GetService <IExtensibleOptions <TDomain> >(); var sagaName = typeof(TSaga).FullName; var sagaRepository = sp.GetTypeSpecificService <TDomain, ISagaRepository>(); var sagaHandler = new SagaDomainEventsHandler <TSaga>(sagaRepository, sp.GetService <SagaCorrelationsMapper>()); var eventsReader = sp.GetTypeSpecificService <TDomain, IPeristedEventsReader>(); var faultHandler = sp.GetService <IDomainEventsFaultHandler>(); var checkpointManager = new SimpleChekpointManager(eventsReader); return(new DomainEventsProcessor(sagaHandler, checkpointManager, faultHandler)); }); return(this); }
public OzzyNodeOptionsBuilder <TDomain> UseInMemoryMonitoring() { Services.TryAddSingleton <IMonitoringRepository, InMemoryMonitoringRepository>(); Services.TryAddSingleton <INodesManager>(sp => { var repository = sp.GetService <IMonitoringRepository>(); var eventsManager = sp.GetTypeSpecificService <TDomain, IDomainEventsManager>(); return(new NodesManager(repository, eventsManager)); }); Services.AddTypeSpecificSingleton <TDomain, IDomainEventsProcessor>(sp => { var checkpointManager = new SimpleChekpointManager(sp.GetTypeSpecificService <TDomain, IPeristedEventsReader>()); var handler = new MonitoringEventsHandler(sp); return(new DomainEventsProcessor(handler, checkpointManager)); }); AddBackgroundProcess <NodesMonitoringProcess>(); return(this); }