2010-06-01 7 views
6

Ho cercato diversi metodi per fornire supporto plug-in per la mia applicazione. Idealmente, creerò una funzionalità di base e basata su diversi clienti che sviluppano plug-in/add-on diversi come l'importazione, l'esportazione di dati, ecc ... Quali sono i metodi disponibili per rendere l'applicazione C# estendibile tramite un'architettura plug-in?Come sviluppare funzionalità basate su plug-in dinamico in C#

Facciamo un esempio. Se abbiamo un programma che consiste in un menu principale (File, Modifica, Visualizza, ecc.) Insieme a un TreeView che mostra diverse marche di automobili raggruppate per costruttore (Ford, GM, per ora). Facendo clic con il tasto destro su un'auto, viene visualizzato un menu di scelta rapida con l'unica opzione "elimina la macchina".

Come si può sviluppare l'applicazione in modo che i plug-in possano essere implementati in modo da consentire a un cliente di vedere un nuovo marchio nel TreeView, diciamo Honda, e anche estendere il menu di scelta rapida dell'automobile in modo che possano ora 'dipingere una macchina'?

Nello sviluppo Eclipse/RCP questo è facilmente gestibile da punti di estensione e plug-in. Come lo gestisce C#? Ho cercato di sviluppare la mia architettura plug-in e di leggere su MEF.

risposta

10

MEF sarebbe un buon punto di partenza.

L'articolo di Glenn Block Managed Extensibility Framework: Building Composable Apps in .NET 4 with the Managed Extensibility Framework offre una buona panoramica.

BTW, non lasciatevi ingannare dal titolo: puoi anche ottenere MEF per .NET 3.5 SP1.

+0

Ho visto un certo numero di video MEF che mostrano l'uso di caricamento di assiemi, cateloghi e contenitori, tuttavia devo ancora comprendere appieno come MEF consente di distribuire un plug-in che modifica il menu principale o un menu di scelta rapida per dato controllo. Immagino che mi manchi il salto finale da ciò che i video ritraggono e che consente alla mia applicazione di rispondere ai regali dei plugin i, e. per esempio, aggiungendo un nuovo pulsante di menu al menu principale. – Matthew

+0

Questo dovrebbe diventare più facile da capire se si utilizza MVVM (http://msdn.microsoft.com/en-us/magazine/dd419663.aspx). Ciò consentirebbe di associare Menu e MenuItem a un modello di oggetto sottostante (collegabile). –

1

Visual Studio 2010 utilizza MEF, quindi penso che sia una scommessa sicura, questo è il modo migliore per andare in MS. System.Addin è sempre sembrato un po 'pesante, ma potrebbe essere una scelta migliore se hai bisogno di addin per funzionare sempre e il tuo codebase è in continua evoluzione.

Se si preoccupa di isolare i componenti aggiuntivi, è necessario leggere su AppDomains. Ho un progetto dimostrativo che ho realizzato per aiutare ad imparare come trattare con isolating assemblies within an AppDomain here, che potresti trovare interessante. Brevi informazioni sull'isolamento: solo i tuoi tipi dovrebbero mai oltrepassare il confine e questi tipi dovrebbero essere sigillati, eseguire urla dalla gestione degli eventi del dominio incrociato e gli add-in non dovrebbero MAI estendere MarshallByRefObject.