In C#, qual è il modo migliore per ritardare la gestione di tutti gli eventi noti fino a quando un'entità non è stata completamente modificata? Diciamo, per esempio, che un soggetto - MyEntity - ha la proprietà ID, Nome e Descrizione ...Ritarda la gestione degli eventi fino a quando gli eventi non sono stati attivati
public class MyEntity
{
public Int32 ID { get; set; }
public String Name { get; set; }
public String Description { get; set; }
}
Quando si modifica ciascuna di queste proprietà, un evento viene generato per ogni modifica.
A volte, l'ID è l'unica proprietà modificata e talvolta tutte le proprietà vengono modificate. Voglio che i listener registrati dell'evento di modifica attenderanno fino a quando tutte le proprietà modificate nel "batch" non saranno state modificate.
Qual è il modo migliore per realizzare questo?
Nella mia testa, qualcosa di simile al pattern UnitOfWork, dove è possibile racchiudere un'istruzione using attorno alla chiamata al metodo nel livello più alto dello stack di chiamate ma non ha idea di come implementare una cosa del genere ...
Modifica: Come un chiarimento ... Gli ascoltatori sono sparsi attraverso l'applicazione e sono in esecuzione in altri thread. Un altro attore imposta, ad esempio, il nome che deve chiamare la proprietà MyEntity.Name per impostare il valore.
A causa della progettazione, la modifica della proprietà Nome può attivare altre proprietà da modificare, quindi la necessità per gli ascoltatori di sapere che la modifica delle proprietà è stata completata.
dipende molto da altri requisiti, per esempio gli ascoltatori agiscono su singole modifiche di proprietà o elaborano sempre l'entità, indipendentemente dalla quantità e dalla posizione delle modifiche? –
Perché non utilizzare le bandiere? Se i flag 1 e 2 sono impostati, ma 3 non lo è ... non fare nulla. Quando viene attivato l'evento e viene impostato il flag 3, THEN elabora il codice che si desidera eseguire. –
OT: Mi sono reso conto che il mio pensiero originale con l'istruzione "using" proveniva dall'implementazione di log4net in cui log4net.NDC.Push() è chiamato per inviare un messaggio di contesto al contesto corrente del thread ... – ForestC