Ricomporre un catalogo MEF monitorando una cartella

di Emanuele Filardo, in .NET Framework, UserScript,

Il Managed Extensibility Framework (MEF) è in grado di caricare le dipendenze e i tipi attraverso molteplici Catalog, dove può fare riferimento per cercare le definizioni, ma qualora non si trovi quello adatto alle proprie esigenze è possibile crearne di personalizzati.

Abbinando al DirectoryCatalog un FileSystemWatcher, è possibile ottenere un nuovo Catalog che, sfruttando la Recomposition, consente di monitorare la directory in cui sono archiviate le Parts e rilavarne la presenza di nuove, inserendole nel container in fase di avvio (comportamento predefinito del DirectoryCatalog) e anche a runtime, ad ogni modifica della cartella.

public class MonitoredDirectoryCatalog : DirectoryCatalog
{
  private FileSystemWatcher monitor;

  // costruttore base cerca solo file dll, formato standard
  public MonitoredDirectoryCatalog(string path) : base(path, "*.dll")
  {
    monitor = new FileSystemWatcher(path);
    monitor.Changed += new FileSystemEventHandler(monitor_Changed);
    monitor.EnableRaisingEvents = true;
  }

  // costruttore base cerca in base al filter personalizzato
  public MonitoredDirectoryCatalog(string path, string filter) : base(path, filter)
  {
    monitor = new FileSystemWatcher(path);
    monitor.Filter = filter;
    monitor.Changed += new FileSystemEventHandler(monitor_Changed);
    monitor.EnableRaisingEvents = true;
  }

  void monitor_Changed(object sender, FileSystemEventArgs e)
  {
    this.Refresh();
  }
}

Nello script si mostra, quindi, come creare un MonitoredDirectoryCatalog che, intercettando l'evento Changed della classe FileSystemWatcher, aggiorna il catalogo ricomponendo le Parts.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi