Correggimi se ho torto, ma MEF è utile solo per gestire un insieme di cose sconosciute (plug-in) che possono essere individuate automaticamente e cablate automaticamente. Per un progetto futuro avremo bisogno di un vero contenitore IoC per configurare in modo esplicito le parti conosciute dell'applicazione (che MEF non è bravo a) ma in aggiunta dobbiamo anche supportare i plugin autodiscover (preferibilmente POCO senza attributi, se possibile). Un container IoC può supportarlo facilmente/per impostazione predefinita? In caso affermativo, puoi dare un suggerimento rapido su come eseguire l'operazione in Unity e StructureMap? Questi sono i due che attualmente preferiamo. Vorremmo davvero evitare una dipendenza da un contenitore IoC e da ME.Usa contenitore IoC per architettura plugin
risposta
Penso che sia importante notare che mentre MEF non è un contenitore IoC in senso convenzionale, sta eseguendo l'inversione del controllo. In realtà, non sarei d'accordo e direi che MEF è un contenitore IoC molto simile a qualsiasi altro. La vera differenza tra say Unity e MEF, è che MEF di default supporta la composizione su una risoluzione di tipo esplicita e digita discovery over configuration. Ma, come abbiamo visto con il progetto MEFContrib, è possibile che il comportamento di MEF sia più simile a un contenitore IoC tradizionale. MEF fornisce una linea di base eccellente per il comportamento dei componenti modulari, prendendo molto del duro innesto e il modo in cui è progettato, ti permette di aggiungere più funzionalità esso. Diciamo per esempio che la base di codice esistente è stata costruita attorno a un altro contenitore o localizzatore di servizi IoC, è possibile collegare uno ExportProvider
per fare ciò, è possibile collegare un provider a un servizio di localizzazione come il progetto Common Service Locator e quindi collegare un compatibile Implementazione CSL e MEF che compone parti componenti utilizzando tipi derivati dall'altro contenitore IoC. MEF esegue anche l'iniezione di dipendenza per te.
Se si vuole evitare di avere una dipendenza da uno specifico contenitore IoC o MEF stesso, si può sempre usare qualcosa come il Local Service Locator che è un'astrazione sulle operazioni di contenitore comune. In questo modo se hai bisogno/vuoi cambiare il modo in cui tutto è scandagliato insieme, è relativamente indolore. Esistono implementazioni CSL compatibili per la maggior parte dei contenitori IoC e MEF.
Spero che questo aiuti.
Il contributo di MEF consentirebbe alle parti di essere POCO senza attributi? – bitbonk
Il modello Attribuito è solo il modello di programmazione predefinito per MEF. MEFContrib ha un 'ConventionCatalog', che combinato con' PartRegistry' ti permette di registrare i tipi più come contenitori Unity/Autofac/Windsor ecc. –
- 1. Un semplice contenitore IoC per un piccolo sistema di plugin
- 2. Architettura per comunicazione estensione/plugin
- 3. Architettura "plugin" per applicazioni Web Java
- 4. Modo corretto per passare il contenitore IoC
- 5. Contenitore IoC per librerie di classi portatili
- 6. Contenitore IOC migliore per dispositivi android/mobile
- 7. Quando utilizzare un contenitore IOC?
- 8. Contenitore IoC incorporato nel progetto
- 9. Contenitore IoC leggero che funziona in Unity3D
- 10. Contenitore IoC .NET per mid-size ASP.NET MVC
- 11. Domanda di architettura del plugin C#
- 12. Architettura per i plugin da caricare in runtime
- 13. Architettura acuta per le app Winform?
- 14. Come utilizzare un contenitore Unity IoC con Template10?
- 15. Catch delle eccezioni di runtime nel contenitore IoC
- 16. Errore durante il download del contenitore Unity IoC da Nuget
- 17. Come ripristinare tutte le istanze nel contenitore IOC
- 18. Come eseguire semplici transazioni JDBC Spring al di fuori del contenitore IoC?
- 19. Utilizzo di IoC per il test dell'unità
- 20. IoC, AOP e altro
- 21. Quante CPU usa un contenitore mobile?
- 22. Architettura plugin nelle app Web (esempi o frammenti di codice?)
- 23. Architettura plug-in C# con interfacce condivise tra i plugin
- 24. Come si usa questo plugin jQuery per cancellare un cookie?
- 25. Antipatterns di utilizzo del contenitore IoC. Perché i contenitori IoC sono così complessi e usati in modo "fantasioso"?
- 26. Framework IoC consigliato per iOS?
- 27. ServiceStack Funq Sostituzione di IoC
- 28. MEF rispetto a qualsiasi IoC
- 29. Architettura per applicazioni WinForms?
- 30. Architettura per realizzazioni/distintivi
Cosa c'è di sbagliato nell'usare MEF per i plugin? È progettato esattamente per quel caso d'uso e la sua parte del framework .Net. – jeroenh
Dai un'occhiata a Spring.Net. –
Hai detto che vuoi evitare di avere un contenitore IoC e MEF, quindi non lo invierò come risposta. Ma [Autofac] (http://nblumhardt.com/2010/04/introducing-autofac-2-1-rtw/) si integra abbastanza bene con MEF. –