2010-07-20 11 views
15

Dopo aver letto alcune cose come questa: http://mikehadlow.blogspot.com/2008/09/managed-extensibility-framework-why.htmlUtilizzando MEF come un CIO

Capisco che MEF ha alcuni featcures che non troverete in un CIO, e che MEF ha alcune cose IoC che non è probaboly così avanzata come altri sistemi IoC possono offrire.

Ho bisogno del materiale del MEF. Ho anche bisogno di un framework IoC o starei bene con ciò che ha MEF?

Asher

+0

Si prega di indicare una risposta a beneficio della comunità e il vostro indice di gradimento. – RyBolt

risposta

8

A seconda delle esigenze/codice esistente.

Se si dispone di un'infrastruttura di codice esistente costruita su un contenitore IoC, è possibile combinarli in realtà con MEF. Recentemente ho creato un framework ASP.NET MVC + MEF e un paio di miei lettori hanno chiesto come integrare Unity con il framework MEF + MVC che ho creato. Questo risultato è stato davvero facile, grazie a un progetto chiamato Common Services Locator.

Il progetto CSL è progettato per fornire un'astrazione sulla posizione del servizio, così posso prendere un provider CSL per Unity, collegarlo con un ExportProvider personalizzato e MEF inizia automaticamente a comporre le mie parti guidate da IoC.

Questo è uno dei vantaggi del modello ExportProvider di MEF, è possibile collegare facilmente qualsiasi fornitore aggiuntivo per iniziare a estrarre le esportazioni da una varietà di fonti.

La scorsa settimana I blogged about combining MEF+Unity (e anche MEF + Autofac come un altro exmaple) e sebbene i miei esempi siano orientati per ASP.NET MVC, il concetto è lo stesso per la maggior parte delle altre implementazioni.

Se hai la possibilità di creare qualcosa di nuovo usando MEF, probabilmente troverai che non avrai bisogno di un contenitore IoC, MEF può gestire l'iniezione di proprietà, l'iniezione del costruttore, la gestione a vita parziale e la risoluzione del tipo.

Fatemi sapere se avete domande :)

3

Un CIO segue uno scopo.

MEF è appositamente progettato, se si desidera avere una sorta di plugin nel sistema. o codice che non ti fidi di eseguire correttamente (non dimenticare di gestire le eccezioni).

ma, viene quindi con un overhead.

se si vuole solo fare IoC, in quanto è un buon modello di progettazione per software estensibile e testabile, quindi raccomanderei AutoFac, come lo è lo stesso ragazzo. più o meno :-)

e, se avete bisogno di entrambe le intenzioni. quindi utilizzare Entrambi. come ha sottolineato Matteo, è possibile utilizzare il CSL per astrarre entrambi. se lo si desidera.

per i plugin -> MEF

per il CIO -> un semplice IOC

3

Usiamo MEF come un contenitore CIO e si sta lavorando per noi.

Detto questo, si dovrebbe dare un'occhiata a questo post sul blog di Glenn Block dove elenca le carenze che si possono incontrare: Should I use MEF for my general IoC needs?

+0

MEF2 (in .NET Framework 4.5) risolve i problemi descritti in quell'articolo. –

1

Stavo usando il modello di provider essenzialmente per "IOC" nell'applicazione Web prima di passare a AutoFac di recente.

Fondamentalmente il mio requisito è che devo essere in grado di "vendere" le applicazioni, quindi tutte le interfacce devono essere astratte. Usando il Modello Provider le cose tendono a diventare disordinate. Usare un contenitore IOC (se già lo è) ha più senso, e posso ancora soddisfare i miei requisiti di "vendita" perché il contenitore IOC può essere "riconfigurato" per consentire implementazioni diverse.

Penso che MEF sarebbe la soluzione migliore se si desidera una base di codice pulita perché ha più convenzioni, quindi essenzialmente le persone potrebbero rilasciare componenti in una cartella e non modificare alcuna configurazione per istigare le modifiche. Questo è bello ma probabilmente eccessivo per il mio scenario in cui è sufficiente un semplice override di configurazione.

Leggi tutto sul mio blog post - spero che il blog sarà ottenere alcuni buoni commenti su di esso troppo: http://healthedev.blogspot.com/2011/12/making-custom-built-applications.html