using Microsoft.Extensions.DependencyInjection; namespace FictionArchive.Service.Shared.Services.EventBus; public class EventBusBuilder where TEventBus : class, IEventBus { private readonly IServiceCollection _services; private readonly SubscriptionManager _subscriptionManager; public EventBusBuilder(IServiceCollection services) { _services = services; _services.AddSingleton(); _subscriptionManager = new SubscriptionManager(); _services.AddSingleton(_subscriptionManager); } public EventBusBuilder Subscribe() where TEvent : IntegrationEvent where TEventHandler : class, IIntegrationEventHandler { _services.AddKeyedTransient(typeof(TEvent).Name); _subscriptionManager.RegisterSubscription(); return this; } }