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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Rendere le variabili read-only in una pipeline di Azure DevOps
Utilizzare una qualunque lista per i parametri di tipo params in C#
Cancellare una run di un workflow di GitHub
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Filtrare i dati di una QuickGrid in Blazor con una drop down list
Gestire gli accessi con Token su Azure Container Registry
Usare il colore CSS per migliorare lo stile della pagina
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Migliorare la sicurezza dei prompt con Azure AI Studio