public EventSourcedRepository([Import] IBus <EventDispatcher, IEventHandler> eventBus, [Import] ITextSerializer serializer, [Import] ObjectCache cache) { this.eventBus = eventBus; this.serializer = serializer; this.cache = cache; this.messagingRandomRetry = new MessagingRandomRetry(); this.sqlIncrementalRetry = new SqlIncrementalRetry(); if (typeof(IMementoOriginator).IsAssignableFrom(typeof(T))) { assignMemento = (originator) => { (originator as IMementoOriginator).Memento = (IMemento)this.cache.Get(PartitionKey(originator.Id)); }; saveMemento = (originator) => { var memento = (originator as IMementoOriginator).Memento; this.cache.Set(PartitionKey(originator.Id), memento, new CacheItemPolicy { AbsoluteExpiration = DateTime.UtcNow.AddMinutes(((ConfigurationManager.GetSection(N3Section.N3_NAME) as N3Section).ES.TypesConfiguration.CacheExpires)) }); }; } else { assignMemento = (originator) => { }; saveMemento = (originator) => { }; } }
public ProcessManagerRepository([Import] DbContext context, [Import] IBus <CommandDispatcher, ICommandHandler> commandBus, [Import] ITextSerializer serializer) { this.commandBus = commandBus; this.serializer = serializer; this.context = context; messagingRandomRetry = new MessagingRandomRetry(); sqlIncrementalRetry = new SqlIncrementalRetry(); }
public void RetryDatabase() { SqlIncrementalRetry sql = new SqlIncrementalRetry(); int i = 0; sql.ExecuteAction(() => { if (i < 3) { i++; throw new TimeoutException("Retry " + i); } }); Assert.AreEqual(i, 3); }