La mia applicazione dovrebbe essere estensibile. Per i miei bisogni ho implementato alcuni servizi. Questi servizi sono basati sul principio di IoC/DI. Quindi i servizi incapsulano il concetto dell'applicazione.Best practice per l'implementazione di una strategia addin/addon/plug-in
Per esempio, esiste un servizio IApplication. ApplicationService espone le informazioni sull'esecuzione corrente dell'applicazione. Sono specificati AssemblyInfo e così via. Un altro esempio è l'INavigationService (vedi mef.codeplexcom negli esempi). Questo servizio fornisce alcune proprietà in cui sono riportate informazioni sull'elemento selezionato corrente e anche alcuni eventi.
Penso che "l'approccio al servizio" sia il più semplice e semplifica i punti di estensione per l'applicazione. Quindi, non sono sicuro che questo sia davvero l'approccio migliore. Cosa ne pensi? Come implementeresti "punti di estensione" in un'applicazione come addin/addon/plugin ...?
Grazie in anticipo per le vostre risposte! E scusa, il mio inglese è povero. ;)
Se si desidera aggiungere informazioni, si prega di ** aggiornare ** il tuo post originale modificandolo - non aggiungere la tua risposta - rende più difficile da seguire ... –
Sì, MEF è ** non ** a Contenitore DI: poiché il suo lavoro è diverso da un contenitore DI. Ma non sono d'accordo: mescolare MEF e un contenitore DI (come StructureMap o Unity) non è così difficile e può essere fatto abbastanza bene. Potrebbe essere necessario spiegare in modo più dettagliato il motivo per cui non pensi che funzioni per oyu ..... –
Gestire il caricamento in un AppDomain non è banale e non penso che la maggior parte dei framework DI gestirà questo. Tutti i tuoi servizi dovranno essere inoltrati per attraversare il confine di AppDomain, il che significa anche che tutte le classi che passano avanti e indietro devono essere MarshalByRef o Serializable.Potresti considerare di avere una categoria di estensioni "attendibili" (senza il marshalling) e un'altra categoria di estensioni "non attendibili" che possono accedere solo a un numero limitato di servizi di marshalling. –