Condividi tramite


ChangeMonitor Classe

Definizione

Fornisce una classe base per un tipo personalizzato derivato che monitora le modifiche nello 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à 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 tipica della cache, 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 si sono verificate modifiche.

Il framework di .NET include le classi seguenti che derivano dalla classe ChangeMonitor:

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 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à , iniziare il UniqueId monitoraggio e chiamare InitializationComplete() il metodo prima che venga restituito il metodo . Se un costruttore rileva un errore durante le costruzioni e deve disporre dell'eliminazione delle risorse, il costruttore può chiamare solo l'overload dopo che il InitializationComplete() metodo viene chiamato perché l'overload Dispose genererà un'eccezione DisposeInvalidOperationException se l'inizializzazione 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 , l'istanza richiede l'eliminazione ObjectCache del monitoraggio delle modifiche. Anche se l'inserimento non è valido e genera 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 delle dipendenze, l'istanza OnChangedCallback verrà chiamata immediatamente quando NotifyOnChanged(OnChangedCallback) viene chiamata. In caso contrario, l'istanza OnChangedCallback verrà chiamata una sola volta. Questa chiamata una volta si verifica quando viene chiamato il OnChanged(Object) metodo perché l'istanza ChangeMonitor ha rilevato una modifica o quando viene chiamato il Dispose() metodo in ChangeMonitor, a seconda di quale condizione si verifica per la prima volta.

  • 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 può chiamare il metodo prima che OnChanged(Object) un'implementazione della cache abbia chiamato NotifyOnChanged(OnChangedCallback) metodo o dopo. Se il OnChanged(Object) metodo viene chiamato prima NotifyOnChanged(OnChangedCallback) di essere chiamato, l'implementazione di base ChangeMonitor informerà la 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 viene richiamato il NotifyOnChanged(OnChangedCallback) metodo .

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

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

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

    • Dopo che l'elemento della cache e le ChangeMonitor istanze associate vengono passate 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 cambiata. 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 OnChanged(Object) metodo chiama automaticamente il 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 un costruttore di 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

Nome Descrizione
ChangeMonitor()

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

Proprietà

Nome Descrizione
HasChanged

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

IsDisposed

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

UniqueId

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

Metodi

Nome Descrizione
Dispose()

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

Dispose(Boolean)

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

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 il Type dell'istanza corrente.

(Ereditato da Object)
InitializationComplete()

Chiamato dal costruttore delle classi derivate per indicare che l'inizializzazione è stata completata.

MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
NotifyOnChanged(OnChangedCallback)

Chiamato dagli implementatori della cache per registrare un callback e notificare a un'istanza ObjectCache tramite il OnChangedCallback delegato quando una dipendenza è cambiata.

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