Sto realizzando l'ennesima versione di una classe base astratta da utilizzare per tutte le entità aziendali. Questa classe dovrà implementare alcune interfacce basilari, tra le quali INotifyPropertyChanged, e pensavo anche alla ISupportInitialize. Il dubbio che ho nell'implementare quest'ultima interfaccia è se devo generare o no gli eventi di notifica del cambio dei valori delle proprietà nel momento che a seguito della chiamata al metodo ISupportInitialize.EndInit() vado ad impostare tutti i valori delle proprietà modificate dopo la chiamata a ISupportInitialize.BeginInit().
Per chiarezza (?), segue il frammento dell'implementazione della classe ed in particolare la parte di implementazione dell'interfaccia ISupportInitialize.
#region ISupportInitialize implementation
public void BeginInit()
{
if (!m_Initializing)
{
m_InitializeData = new Hashtable();
m_Initializing = true;
}
}
public void EndInit()
{
if (m_Initializing)
{
m_Initializing = false;
Type t = this.GetType();
foreach (DictionaryEntry entry in m_InitializeData)
{
PropertyInfo pi = t.GetProperty((string)entry.Key);
if (pi != null)
{
pi.SetValue(this, entry.Value, null);
}
}
m_InitializeData = null;
}
}
#endregion
In questa implementazione nel metodo EndInit si impostano i valori di tutte le proprietà modificate dopo la chiamata alla BeginInit bufferizzate in una tabella hash, chiamando il metodo SetValue via reflection che invoca il setter della relativa proprietà, la quale noticherà la modifica generando l'evento relativo all'implementazione della INotifyPropertyChanged (non mostrata nel frammento di codice).
Quindi ecco il dubbio: è corretto così, oppure devo disabilitare le notifiche del cambio delle proprietà quando sono nella EndInit? Personalmente credo che come è scritta ora non vada bene. Da quello che ho capito io, lo scopo dell'implementazione dell'interfaccia ISupportInitialize è di impostare tutte le proprietà senza craere problemi di incoerenza sullo stato dell'entità stessa e quindi, credo che non debbano essere generare le relative notifiche, le quali potrebbero dare problemi ai client "in ascolto".
Sono graditi commenti e/o suggerimenti.