public static IServiceCollection AddOpenSleigh(this IServiceCollection services, Action <IBusConfigurator> configure = null) { var systemInfo = SystemInfo.New(); var typeResolver = new TypeResolver(); var sagaTypeResolver = new SagaTypeResolver(typeResolver); services.AddTransient <IMessageBus, DefaultMessageBus>() .AddSingleton(systemInfo) .AddSingleton <ISagaTypeResolver>(sagaTypeResolver) .AddSingleton <ISagasRunner, SagasRunner>() .AddSingleton <ITypesCache, TypesCache>() .AddSingleton <ITypeResolver>(typeResolver) .AddSingleton <ISerializer, JsonSerializer>() .AddSingleton <IMessageHandlersResolver, DefaultMessageHandlersResolver>() .AddSingleton <IMessageHandlersRunner, DefaultMessageHandlersRunner>() .AddSingleton <IMessageContextFactory, DefaultMessageContextFactory>() .AddSingleton <IMessageProcessor, MessageProcessor>() .AddHostedService <SubscribersBackgroundService>() .AddTransient <IOutboxProcessor, OutboxProcessor>() .AddSingleton(OutboxProcessorOptions.Default) .AddHostedService <OutboxBackgroundService>() .AddTransient <IOutboxCleaner, OutboxCleaner>() .AddSingleton(OutboxCleanerOptions.Default) .AddHostedService <OutboxCleanerBackgroundService>(); var builder = new BusConfigurator(services, sagaTypeResolver, typeResolver, systemInfo); configure?.Invoke(builder); return(services); }
public static IServiceCollection AddOpenSleigh(this IServiceCollection services, Action <IBusConfigurator> configure = null) { var stateTypeResolver = new SagaTypeResolver(); services.AddSingleton <ISagaTypeResolver>(stateTypeResolver) .AddSingleton <ISagasRunner, SagasRunner>() .AddSingleton <ITypesCache, TypesCache>() .AddSingleton <ITypeResolver>(ctx => { var resolver = new TypeResolver(); var sagaTypeResolver = ctx.GetRequiredService <ISagaTypeResolver>(); var sagaTypes = sagaTypeResolver.GetSagaTypes(); foreach (var t in sagaTypes) { resolver.Register(t); } return(resolver); }) .AddSingleton <IMessageContextFactory, DefaultMessageContextFactory>() .AddScoped <IMessageBus, DefaultMessageBus>() .AddSingleton <IMessageProcessor, MessageProcessor>() .AddSingleton <IOutboxProcessor>(ctx => { var repo = ctx.GetRequiredService <IOutboxRepository>(); var publisher = ctx.GetRequiredService <IPublisher>(); var logger = ctx.GetRequiredService <ILogger <OutboxProcessor> >(); return(new OutboxProcessor(repo, publisher, OutboxProcessorOptions.Default, logger)); }) .AddSingleton <IOutboxCleaner>(ctx => { var repo = ctx.GetRequiredService <IOutboxRepository>(); return(new OutboxCleaner(repo, OutboxCleanerOptions.Default)); }); var builder = new BusConfigurator(services, stateTypeResolver); configure?.Invoke(builder); services.AddHostedService <SubscribersBackgroundService>() .AddHostedService <OutboxBackgroundService>() .AddHostedService <OutboxCleanerBackgroundService>(); return(services); }