public async Task SaveAsync(ICollectionRetrievalContext <TData> retrievalContext, Action doAfterDataAdded) { var existingInstancesByDescriptor = new Dictionary <ITerminalDescriptor, TData>(); foreach (var data in retrievalContext.Data) { var terminalDescriptor = TerminalDescriptorsFactory.Create(data); var isExistingInstance = !Data.Add(terminalDescriptor, data); if (isExistingInstance) { existingInstancesByDescriptor[terminalDescriptor] = data; } } doAfterDataAdded?.Invoke(); retrievalContext.PublishDataAddedEvent(); await retrievalContext.CompleteReconstitutionAsync(); retrievalContext.PublishDataReconstitutedEvent(); foreach (var existingInstanceByDescriptor in existingInstancesByDescriptor) { Data.Update(existingInstanceByDescriptor.Key, existingInstanceByDescriptor.Value); } }
public async Task SaveAsync(INonTerminalDescriptor descriptor, ICollectionRetrievalContext <TData> retrievalContext, Action doAfterDataAdded) { Compositions.Save(descriptor, Describe(retrievalContext.Data)); await SaveAsync(retrievalContext, () => { Compositions.Save(descriptor, Describe(retrievalContext.Data)); doAfterDataAdded?.Invoke(); }); }
public NonTerminalDataAvailableEventArgs(INonTerminalDescriptor descriptor, ICollectionRetrievalContext <TData> retrievalContext) { Descriptor = descriptor; RetrievalContext = retrievalContext; }
public async Task SaveAsync(ICollectionRetrievalContext <TData> retrievalContext) { await SaveAsync(retrievalContext, doAfterDataAdded : null); }
public async Task SaveAsync(INonTerminalDescriptor descriptor, ICollectionRetrievalContext <TData> retrievalContext) { await SaveAsync(descriptor, retrievalContext, doAfterDataAdded : null); }
public void PublishNonTerminalDataAvailableEvent(INonTerminalDescriptor descriptor, ICollectionRetrievalContext <TData> retrievalContext) { NonTerminalDataAvailableEvent?.Invoke(this, new NonTerminalDataAvailableEventArgs <TData>(descriptor, retrievalContext)); }