di: Francesco Camarlinghi 18 Giugno 2008
Il supporto ai plugin è sicuramente una funzionalità fondamentale per molte applicazioni, dai sistemi di gestione di forum e blog fino ai CMS.
Un plugin (letteralmente "inserisci") è una estensione di un programma che ne espande le funzionalità di base. In un blog, ad esempio, una estensione potrebbe aggiungere il supporto ad una nuova tipologia di feed, modificare come vengono visualizzati i messaggi, etc.
In questo articolo vedremo come creare un sistema di gestione dei plugin servendoci di ASP.NET e del namespace System.Reflection, che fornisce gli strumenti per esplorare la struttura degli assembly e dei tipi contenuti al loro interno, come classi, interfacce, etc.
Per rendere la spiegazione più chiara, implementiamo un plugin molto semplice. Potremmo trovare alcuni limiti a questa applicazione ma via via li evidenzieremo e sicuramente ci forniranno spunti per successivi sviluppi.
Il cuore della nostra applicazione è composto principalmente da un'interfaccia, IPlugin ed una classe, PluginManager. Nel realizzare il progetto di esempio, ho preferito inserire queste due classi in una DLL a se stante, da inserire quindi nella cartella Bin del sito.
IPlugin è l'interfaccia che una classe dovrà implementare per essere considerata un plugin. In questo modo potremo, grazie alla reflection, navigare fra le classi caricando soltanto quelle contrassegnate come estensione.
All'interno dell'interfaccia sono definite le proprietà e i metodi che tutti i plugin dovranno implementare, fornendo in questo modo anche un punto di accesso alle funzionalità dell'estensione, sconosciute all'applicazione.
Nel nostro esempio IPlugin è molto semplice:
public interface IPlugin
{
string Name { get; }
void DoAction();
}
Abbiamo definito la proprietà Name, che rappresenta il nome del plugin, e il metodo DoAction() che rappresenta il punto di accesso. Una volta che l'estensione sarà caricata potremo richiamarne le funzionalità proprio attraverso questo metodo.
In una implementazione più completa, altre proprietà tipiche potrebbero essere il nome dell'autore, il sito Web di riferimento, una breve descrizione del plugin, etc.
Un punto fondamentale nella nostra architettura è aver dichiarato questa interfaccia come pubblica, rendendola quindi accessibile da altri assembly. In questo modo potremo creare un file DLL per ogni plugin, rendendo di fatto più semplice aggiungere, aggiornare ed eliminare le estensioni caricate nella nostra applicazione.
La classe statica PluginManager si occupa invece del caricamento e della gestione dei plugin. In particolare offre:
List) contenente i plugin caricatiInitializePlugins() che si occupa di esplorare la cartella Bin/Plugins del sito alla ricerca di tutti i file ".dll" contenuti al suo interno (vedremo fra poco perchè la scelta è caduta proprio su questa cartella)LoadPlugin(string assemblyName), che, dato il nome di un assembly, si occupa di caricare fisicamente un singolo plugin
Guida Windows Azure Code SnippetsLe migliori pratiche per far girare le applicazioni "in the cloud",... |
Guida ASP.NET MVC Best PracticesUn workflow dettagliato e ricco di suggerimenti pratici per... |
Guida ASP.NET Starter KitUn modo semplice per imparare ad utilizzare le tecnologie Microsoft... |
Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.
Iscriviti alla newsletter
|
|
Corso Progettazione database11 Maggio 2012 a Milano |
|
|
Amministratore di Reti Windows Server 200811 Giugno 2012 a Milano |
|
Nessun corso previsto |