private void ConfigureDomainEvents(IServiceCollection services) { var eventRegistry = new DomainEventRegistry(); services.AddSingleton <IDomainEventRegistry>(eventRegistry); services.AddSingleton(eventRegistry); services.AddTransient <EventHandlerFactory>(); services.AddTransient <IEventHandler <AWSContextAccountCreatedIntegrationEvent>, AWSContextAccountCreatedEventHandler>(); services.AddTransient <IEventDispatcher, EventDispatcher>(); var capabilitiesTopicName = Configuration["CAPABILITY_SERVICE_KAFKA_TOPIC_CAPABILITY"]; var capabilitiesTopicsTopicName = Configuration["CAPABILITY_SERVICE_KAFKA_TOPIC_TOPICS"]; eventRegistry .Register <CapabilityCreated>("capability_created", capabilitiesTopicName) .Register <CapabilityUpdated>("capability_updated", capabilitiesTopicName) .Register <CapabilityDeleted>("capability_deleted", capabilitiesTopicName) .Register <MemberJoinedCapability>("member_joined_capability", capabilitiesTopicName) .Register <MemberLeftCapability>("member_left_capability", capabilitiesTopicName) .Register <ContextAddedToCapability>("context_added_to_capability", capabilitiesTopicName) .Register <ContextUpdated>("context_updated", capabilitiesTopicName) .Register <AWSContextAccountCreatedIntegrationEvent>("aws_context_account_created", capabilitiesTopicName) .Register <TopicCreated>("topic_created", capabilitiesTopicsTopicName) .Register <ClusterCreated>("cluster_created", capabilitiesTopicsTopicName); var scanner = new DomainEventScanner(eventRegistry); scanner.EnsureNoUnregisteredDomainEventsIn(Assembly.GetExecutingAssembly()); }
private IDomainEventRegistry <TAggregate> CreateRegistry(IServiceProvider serviceProvider) { var registry = new DomainEventRegistry <TAggregate>(); ApplyEventRegisters(registry); return(registry); }
private static void ConfigureDomainEvents(IServiceCollection services) { var eventRegistry = new DomainEventRegistry(); services.AddSingleton(eventRegistry); services.AddTransient <IEventHandler <ContextAccountCreatedDomainEvent>, ContextAccountCreatedDomainEventHandler>(); services.AddTransient <IEventHandler <CapabilityRegisteredDomainEvent>, CapabilityRegisteredEventHandler>(); services.AddTransient <KafkaConsumerFactory.KafkaConfiguration>(); services.AddTransient <KafkaConsumerFactory>(); var serviceProvider = services.BuildServiceProvider(); var topic = "build.capabilities"; eventRegistry.Register <ContextAccountCreatedDomainEvent>( eventTypeName: "aws_context_account_created", topicName: topic, eventHandler: serviceProvider.GetRequiredService <IEventHandler <ContextAccountCreatedDomainEvent> >()); eventRegistry.Register( eventTypeName: "capability_registered", topicName: topic, eventHandler: serviceProvider.GetRequiredService <IEventHandler <CapabilityRegisteredDomainEvent> >()); services.AddTransient <IEventDispatcher, EventDispatcher>(); }
private void ApplyEventRegisters(DomainEventRegistry <TAggregate> registry) { foreach (var eventRegister in _eventRegisters) { eventRegister(registry); } }
public async Task Will_Handle_CapabilityRegisteredEvent() { using (var builder = new HttpClientBuilder()) { var teamCreatedEventHandlerStub = new TeamCreatedEventHandlerStub(); var eventRegistry = new DomainEventRegistry(); eventRegistry.Register( eventTypeName: "capability_registered", topicName: "foo", eventHandler: teamCreatedEventHandlerStub); var client = builder .WithService <DomainEventRegistry>(eventRegistry) .Build(); var input = @"{ ""eventName"": ""capability_registered"", ""version"": ""1"", ""payload"": { ""capabilityName"": ""ADFS-ViewOnly"", ""roleArn"": ""arn:aws:iam::738063116313:role/ADFS-ViewOnly"" } }"; var response = await client.PostAsync("/api/events", new JsonContent(input)); Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.True(teamCreatedEventHandlerStub.HandleAsyncGotCalled); } }
public KafkaConsumerHostedService( ILogger <KafkaConsumerHostedService> logger, IServiceProvider serviceProvider, KafkaConsumerFactory kafkaConsumerFactory, DomainEventRegistry domainEventRegistry) { Console.WriteLine($"Starting event consumer."); _logger = logger; _consumerFactory = kafkaConsumerFactory; _serviceProvider = serviceProvider; _eventRegistry = domainEventRegistry; }
private static void ConfigureDomainEvents(IServiceCollection services) { services.AddTransient <IEventHandler <CapabilityCreatedDomainEvent>, SlackCapabilityCreatedDomainEventHandler>(); services.AddTransient <IEventHandler <CapabilityDeletedDomainEvent>, CapabilityDeletedEventNotifyDedHandler>(); services.AddTransient <IEventHandler <MemberJoinedCapabilityDomainEvent>, SlackMemberJoinedCapabilityDomainEventHandler>(); services.AddTransient <IEventHandler <MemberLeftCapabilityDomainEvent>, SlackMemberLeftCapabilityDomainEventHandler>(); services.AddTransient <IEventHandler <ContextAddedToCapabilityDomainEvent>, SlackContextAddedToCapabilityDomainEventHandler>(); services.AddTransient <IEventHandler <AWSContextAccountCreatedDomainEvent>, SlackAwsContextAccountCreatedEventHandler>(); services.AddTransient <IEventHandler <K8sNamespaceCreatedAndAwsArnConnectedDomainEvent>, K8SNamespaceCreatedAndAwsArnConnectedDomainEventHandler>(); services.AddTransient <EventHandlerFactory>(); var topic = "build.selfservice.events.capabilities"; var eventRegistry = new DomainEventRegistry() .Register <CapabilityCreatedDomainEvent>( eventName: "capability_created", topicName: topic) .Register <CapabilityDeletedDomainEvent>( eventName: "capability_deleted", topicName: topic) .Register <MemberJoinedCapabilityDomainEvent>( eventName: "member_joined_capability", topicName: topic) .Register <MemberLeftCapabilityDomainEvent>( eventName: "member_left_capability", topicName: topic) .Register <ContextAddedToCapabilityDomainEvent>( eventName: "context_added_to_capability", topicName: topic) .Register <AWSContextAccountCreatedDomainEvent>( eventName: "aws_context_account_created", topicName: topic) .Register <K8sNamespaceCreatedAndAwsArnConnectedDomainEvent>( eventName: "k8s_namespace_created_and_aws_arn_connected", topicName: topic); services.AddSingleton(eventRegistry); services.AddTransient <IEventDispatcher, EventDispatcher>(); services.AddScoped <ExternalEventMetaDataStore>(); }
private static void ConfigureDomainEvents(IServiceCollection services) { var eventRegistry = new DomainEventRegistry(); services.AddSingleton <IDomainEventRegistry>(eventRegistry); services.AddTransient <KafkaPublisherFactory.KafkaConfiguration>(); services.AddTransient <KafkaPublisherFactory>(); services.AddHostedService <PublishingService>(); var capabilitiesTopicName = "build.capabilities"; eventRegistry .Register <CapabilityCreated>("capability_created", capabilitiesTopicName) .Register <MemberJoinedCapability>("member_joined_capability", capabilitiesTopicName) .Register <MemberLeftCapability>("member_left_capability", capabilitiesTopicName) .Register <ContextAddedToCapability>("context_added_to_capability", capabilitiesTopicName); var scanner = new DomainEventScanner(eventRegistry); scanner.EnsureNoUnregisteredDomainEventsIn(Assembly.GetExecutingAssembly()); }
private static void ConfigureDomainEvents(IServiceCollection services) { var eventRegistry = new DomainEventRegistry(); services.AddSingleton(eventRegistry); services.AddTransient <IEventHandler <ContextAddedToCapabilityDomainEvent>, ContextAddedToCapabilityEventHandler>(); services.AddTransient <KafkaConsumerFactory.KafkaConfiguration>(); services.AddTransient <KafkaConsumerFactory>(); var serviceProvider = services.BuildServiceProvider(); eventRegistry .Register <ContextAddedToCapabilityDomainEvent>( eventTypeName: "context_added_to_capability", topicName: "build.capabilities", eventHandler: serviceProvider.GetRequiredService <IEventHandler <ContextAddedToCapabilityDomainEvent> >()); services.AddTransient <IEventDispatcher, EventDispatcher>(); }
public void GetAllTopics_given_registered_topics_returns_expected_topics() { // Arrange var topic1 = "build.capabilities"; var topic2 = "build.dummy"; var sut = new DomainEventRegistry() .Register <CapabilityCreatedDomainEvent>( eventName: "eventDummyName1", topicName: topic1) .Register <MemberJoinedCapabilityDomainEvent>( eventName: "eventDummyName2", topicName: topic2); // Act var actualTopic = sut.GetAllTopics(); // Assert Assert.Equal(2, actualTopic.Count()); Assert.Contains(topic1, actualTopic); Assert.Contains(topic2, actualTopic); }
public void GetTopicFor_given_non_registered_event_returns_null() { // Arrange var topic = "build.capabilities"; var sut = new DomainEventRegistry() .Register <CapabilityCreatedDomainEvent>( eventName: "capability_created", topicName: topic) .Register <MemberJoinedCapabilityDomainEvent>( eventName: "member_joined_capability", topicName: topic) .Register <MemberLeftCapabilityDomainEvent>( eventName: "member_left_capability", topicName: topic); // Act var actualTopic = sut.GetTopicFor("dummyEventType"); // Assert Assert.Null(actualTopic); }
public void GetInstanceTypeFor_given_non_registered_event_throws_expected_exception() { // Arrange var topic = "build.capabilities"; var eventTypeName = "dummyEventName"; var sut = new DomainEventRegistry() .Register <CapabilityCreatedDomainEvent>( eventName: "capability_created", topicName: topic) .Register <MemberJoinedCapabilityDomainEvent>( eventName: "member_joined_capability", topicName: topic) .Register <MemberLeftCapabilityDomainEvent>( eventName: "member_left_capability", topicName: topic); // Act and assert Exception ex = Assert.Throws <EventTypeNotFoundException>(() => sut.GetInstanceTypeFor(eventTypeName)); Assert.Contains("Error! Could not determine \"event instance type\"", ex.Message); }
public void GetInstanceTypeFor_given_registered_event_returns_expected_type() { // Arrange var topic = "build.capabilities"; var eventTypeName = "capability_created"; var sut = new DomainEventRegistry() .Register <CapabilityCreatedDomainEvent>( eventName: eventTypeName, topicName: topic) .Register <MemberJoinedCapabilityDomainEvent>( eventName: "member_joined_capability", topicName: topic) .Register <MemberLeftCapabilityDomainEvent>( eventName: "member_left_capability", topicName: topic); // Act var type = sut.GetInstanceTypeFor(eventTypeName); // Assert Assert.Equal(typeof(CapabilityCreatedDomainEvent), type); }
private IServiceProvider GetPreconfiguredServiceProvider() { var loggerFactory = new LoggerFactory(); var logger = new Logger <EventDispatcher>(loggerFactory); var domainEventRegistry = new DomainEventRegistry(); const string topic = "build.capabilities"; domainEventRegistry.Register <MemberJoinedCapabilityDomainEvent>( eventName: "member_joined_capability", topicName: topic); var eventHandlerFactory = new EventHandlerFactory(); var serviceProvider = new ServiceCollection() .AddLogging() .AddTransient <IEventHandler <MemberJoinedCapabilityDomainEvent>, GenericEventHandler <MemberJoinedCapabilityDomainEvent> >() .AddTransient <EventHandlerFactory>() .AddSingleton(domainEventRegistry) .AddTransient <IEventDispatcher, EventDispatcher>() .AddTransient <ExternalEventMetaDataStore>() .BuildServiceProvider(); return(serviceProvider); }
public EventDispatcherBuilder WithEventRegistry(DomainEventRegistry eventRegistry) { _eventRegistry = eventRegistry; return(this); }
public OutboxBuilder WithRegistry(DomainEventRegistry domainEventRegistry) { _domainEventRegistry = domainEventRegistry; return(this); }
public EventDispatcherBuilder() { _logger = new Logger <EventDispatcher>(new NullLoggerFactory()); _eventRegistry = new DomainEventRegistry(); _eventHandlerFactory = new EventHandlerFactory(); }