Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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();
            });
        }
Esempio n. 3
0
 public NonTerminalDataAvailableEventArgs(INonTerminalDescriptor descriptor,
                                          ICollectionRetrievalContext <TData> retrievalContext)
 {
     Descriptor       = descriptor;
     RetrievalContext = retrievalContext;
 }
Esempio n. 4
0
 public async Task SaveAsync(ICollectionRetrievalContext <TData> retrievalContext)
 {
     await SaveAsync(retrievalContext, doAfterDataAdded : null);
 }
Esempio n. 5
0
 public async Task SaveAsync(INonTerminalDescriptor descriptor, ICollectionRetrievalContext <TData> retrievalContext)
 {
     await SaveAsync(descriptor, retrievalContext, doAfterDataAdded : null);
 }
Esempio n. 6
0
 public void PublishNonTerminalDataAvailableEvent(INonTerminalDescriptor descriptor,
                                                  ICollectionRetrievalContext <TData> retrievalContext)
 {
     NonTerminalDataAvailableEvent?.Invoke(this, new NonTerminalDataAvailableEventArgs <TData>(descriptor, retrievalContext));
 }