static ExactlyOnceConfiguration RegisterServices(this IServiceCollection services) { var outboxConfiguration = new OutboxConfiguration(); var configuration = new ExactlyOnceConfiguration(outboxConfiguration); services.AddLogging(); services.AddSingleton <IOnceExecutor>(sp => { var stateStore = (IStateStore)sp.GetRequiredService(configuration.StateStoreType); var client = sp.GetRequiredService <CosmosClient>(); var outboxStore = new OutboxStore(client, outboxConfiguration); var processor = new ExactlyOnceProcessor(outboxStore, stateStore); var onceExecutor = new OnceExecutor(processor); return(onceExecutor); }); return(configuration); }
public IOnceExecutor Create(string requestId) { var executor = new OnceExecutor <OnceExecutor.Request>(processor, requestId, requestId); return(new OnceExecutor(executor)); }