Condividi tramite


ChangeMonitor Classe

Definizione

Fornisce una classe base per un tipo personalizzato derivato che monitora le modifiche dello stato dei dati da cui dipende un elemento della cache.

public ref class ChangeMonitor abstract : IDisposable
public abstract class ChangeMonitor : IDisposable
type ChangeMonitor = class
    interface IDisposable
Public MustInherit Class ChangeMonitor
Implements IDisposable
Ereditarietà
ChangeMonitor
Derivato
Implementazioni

Commenti

La ChangeMonitor classe viene usata come classe base per le classi di monitoraggio derivate specializzate per specifiche implementazioni della cache. Un'istanza ChangeMonitor monitora le modifiche nello stato dei dati da cui dipende un elemento della cache. Ad esempio, l'elemento può essere un file o un'entità di dati il cui contenuto viene memorizzato nella cache. Se il file o l'entità dati viene aggiornata, è necessario modificare anche la voce della cache associata. Gli elementi comuni che possono essere monitorati includono entità di dati, ad esempio campi di database, valori, righe o tabelle, un'altra voce della cache e file e attributi di file.

Una modifica delle dipendenze è una modifica dello stato di una dipendenza. In un'implementazione della cache tipica, dopo che un'istanza ChangeMonitor notifica alla cache che una dipendenza è stata modificata, la cache esegue l'azione richiesta, ad esempio invalidando la voce della cache inserita.

Le classi derivate ChangeMonitor possono essere personalizzate per monitorare le modifiche delle dipendenze per archivi dati specifici. Ad esempio, sono disponibili implementazioni della cache per un file system, una memoria fisica o un database. La ChangeMonitor classe esamina le modifiche che si verificano all'esterno della cache e quindi avvisa la cache che sono state apportate modifiche.

.NET Framework include le classi seguenti che derivano dalla ChangeMonitor classe :

Ognuna di queste classi funziona con tipi diversi di dipendenze. Ad esempio, la classe derivata FileChangeMonitor monitora le modifiche apportate a una cache per i dati del file system (file e cartelle) da cui dipende l'elemento della cache.

Note per gli implementatori

Se si crea un'implementazione della cache personalizzata o un tipo di monitoraggio delle modifiche derivato, è necessario seguire determinate linee guida. L'elenco seguente riepiloga queste linee guida. Per altre informazioni, vedere la documentazione relativa a singoli metodi o proprietà.

  • Il costruttore di una classe derivata deve impostare la proprietà, avviare il UniqueId monitoraggio e chiamare InitializationComplete() il metodo prima che il metodo restituisca. Se un costruttore rileva un errore durante le costruzioni e deve disporre dell'eliminazione delle risorse, il costruttore può chiamare l'overload Dispose solo dopo la chiamata al InitializationComplete() metodo perché l'overload genererà un'eccezione InvalidOperationException se l'inizializzazione Dispose non viene completata.

  • Se si verificano modifiche nei dati monitorati prima del completamento dell'inizializzazione, il costruttore deve chiamare il OnChanged(Object) metodo prima di chiamare il InitializationComplete() metodo .

  • Dopo aver creato un'istanza di un tipo derivato ChangeMonitor , è necessario inserire il monitoraggio in un'implementazione personalizzata ObjectCache . In alternativa, se si usa il monitoraggio delle modifiche, chiamare il Dispose metodo .

  • Dopo l'inserimento di un'istanza ChangeMonitor in un'implementazione ObjectCache , è necessario che l'istanza ObjectCache di Monitoraggio modifiche venga eliminata. Anche se l'inserimento non è valido e causa un'eccezione, l'implementazione ObjectCache deve chiamare l'overload Dispose .

  • Dopo l'inserimento di un monitoraggio modifiche derivato in una cache, l'implementazione ObjectCache deve chiamare NotifyOnChanged(OnChangedCallback), passando un OnChangedCallback oggetto . Il NotifyOnChanged(OnChangedCallback) metodo può essere chiamato una sola volta. Se si è già verificata una modifica della dipendenza, l'istanza OnChangedCallback verrà chiamata immediatamente quando NotifyOnChanged(OnChangedCallback) viene chiamata. In caso contrario, l'istanza OnChangedCallback verrà chiamata una sola volta. Questa chiamata viene eseguita una sola volta quando viene chiamato il OnChanged(Object) metodo perché l'istanza ChangeMonitor ha rilevato una modifica o quando il Dispose() metodo viene chiamato su ChangeMonitor, a seconda di quale si verifica per primo.

  • L'istanza OnChangedCallback fornita da un'implementazione ObjectCache deve rimuovere la voce della cache associata e specificare un motivo usando l'enumerazione DependencyChanged .

  • Un'istanza ChangeMonitor di può chiamare il OnChanged(Object) metodo prima che un'implementazione della cache abbia chiamato NotifyOnChanged(OnChangedCallback) il metodo o dopo. Se il OnChanged(Object) metodo viene chiamato prima NotifyOnChanged(OnChangedCallback) della chiamata, l'implementazione di base ChangeMonitor invierà una notifica alla cache che si è verificata e attiverà il callback da passare immediatamente NotifyOnChanged(OnChangedCallback) quando NotifyOnChanged(OnChangedCallback) viene richiamato. Tutti i dati sullo stato passati al OnChanged(Object) metodo vengono salvati dal monitoraggio delle modifiche e successivamente passati al NotifyOnChanged(OnChangedCallback) metodo quando il NotifyOnChanged(OnChangedCallback) metodo viene richiamato.

  • Un monitoraggio delle modifiche deve implementare il Dispose(Boolean) metodo . Per altre informazioni, vedere la documentazione del metodo Dispose(Boolean).

  • L'overload del Dispose() metodo deve essere chiamato per eliminare l'istanza ChangeMonitor . Le regole per chiamare Dispose sono le seguenti:

    • Prima di inserire un elemento nella cache, è responsabilità del chiamante eliminare un'istanza ChangeMonitor di .

    • Dopo aver passato l'elemento della cache e le ChangeMonitor istanze associate a tale elemento a una cache, l'implementatore della cache deve assicurarsi che il Dispose metodo venga chiamato, anche se l'inserimento ha esito negativo.

    • Dopo che un elemento e le relative istanze associate ChangeMonitor vengono passate a una cache, il chiamante non deve eliminare la dipendenza perché quando viene chiamato il Dispose metodo , la chiamata viene considerata come se la dipendenza sia stata modificata. Di conseguenza, il OnChanged(Object) metodo viene richiamato automaticamente.

  • Prendendo in considerazione queste regole, il Dispose metodo deve essere chiamato in uno dei modi seguenti:

    • Gli utenti devono chiamare l'overload del Dispose() metodo se decidono di non inserire l'istanza derivata di Change Monitor in una cache.

    • Se l'implementazione tenta di inserire l'istanza di Change Monitor in una cache di oggetti ma l'inserimento ha esito negativo, l'implementazione della cache è responsabile della chiamata dell'overload Dispose() . Quando il tentativo di inserimento causa un'eccezione, l'implementazione della cache deve eliminare eventuali dipendenze associate.

    • Se la voce della cache viene rimossa, l'implementazione della cache deve anche eliminare la dipendenza.

    • L'implementazione interna del metodo chiama automaticamente il OnChanged(Object)Dispose metodo dopo che chiama un callback registrato tramite NotifyOnChanged(OnChangedCallback).

Nota: questa chiamata automatica al metodo dispose durante la generazione dell'evento si verifica solo se l'inizializzazione dell'istanza ChangeMonitor è stata completata in precedenza.

Quando il costruttore di un monitoraggio modifiche derivato chiama il InitializationComplete() metodo , se lo stato del monitoraggio modifiche è già stato modificato (ovvero lo stato monitorato è già stato modificato quando il costruttore era ancora attivo), il InitializationComplete() metodo eliminerà automaticamente il monitoraggio delle modifiche.

Costruttori

ChangeMonitor()

Inizializza una nuova istanza della classe ChangeMonitor. Questo costruttore viene chiamato da costruttori in classi derivate per inizializzare la classe base.

Proprietà

HasChanged

Ottiene un valore che indica che lo stato monitorato dalla classe ChangeMonitor è stato modificato.

IsDisposed

Ottiene un valore che indica che viene eliminata un'istanza derivata di una classe ChangeMonitor.

UniqueId

Ottiene un valore che rappresenta l'istanza della classe ChangeMonitor.

Metodi

Dispose()

Rilascia tutte le risorse usate dall'istanza corrente della classe ChangeMonitor.

Dispose(Boolean)

Rilascia tutte le risorse gestite e non gestite ed eventuali riferimenti all'istanza di ChangeMonitor. Questo overload deve essere implementato dalle classi derivate di monitoraggio delle modifiche.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
InitializationComplete()

Chiamato dal costruttore di classi derivate per indicare che l'inizializzazione è terminata.

MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
NotifyOnChanged(OnChangedCallback)

Chiamato dalle implementazioni della cache per registrare un callback e notificare a un'istanza ObjectCache tramite il delegato OnChangedCallback quando una dipendenza viene modificata.

OnChanged(Object)

Chiamato dalle classi derivate per generare l'evento quando viene modificata una dipendenza.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a

Thread safety

Questo tipo è thread-safe.

Vedi anche