2010-11-11 14 views
5

Ho una domanda relativamente semplice, ma più che altro ho bisogno solo di una certa chiarezza, ho usato Prism (Composite Application Guidance) per creare un'applicazione desktop MVVM WPF in C#, questo bit sono tutto chiaro (o almeno così pensavo) insieme all'architettura basata su IoC e sui moduli, ecc. Allo stesso tempo ho iniziato a usare MEF e mi sono reso conto che c'è una specie di area grigia tra i due (ho trovato e letto un numero di articoli/blog sull'hosting di Estensioni MEF in contenitori IoC e similiDifferenze tra MEF, EntLib e Prisma

Tuttavia .... recentemente ho iniziato a esaminare Enterprise Library 5 e questo è ciò che ha portato alla mia confusione: dove si integrano tutti? DI con un'architettura basata su moduli ... EntLib utilizza Di con un'architettura di tipo Application Block ... e ME F non usa affatto la DI? Ciò significa che EntLib e Prism sono metodi architettonici completamente separati o che uno è un sottoinsieme dell'altro? Inoltre, MEF può essere utilizzato con entrambi/entrambi?

Qualsiasi spiegazione sarebbe molto gradita.

Molte grazie

risposta

10

Anch'io, era sconcertato dalla differenza tra il CIO e MEF. Il modo più semplice che ho trovato per descriverli era:

MEF è per scoprire e creare un'istanza di qualcosa che non conosci.

IoC è per richiedere qualcosa che conosci.

Un po 'di contesto. MEF creerà sempre un'istanza dell'importazione che richiedi almeno una volta. Non sei capace di crearlo da solo e metterlo nel catalogo pronto per essere usato. Il MEF è responsabile della creazione e della soddisfazione delle importazioni. Le DLL caricate dinamicamente, in cui non si conoscono le DLL in arrivo, sono un buon esempio.

IoC d'altra parte - si richiede un'implementazione dalla libreria corrente e ne viene fornita una. Ma sei anche responsabile di assicurare che esista un'implementazione.

IoC è per l'iniezione dipendenza. MEF è per estensibilità.

+0

Ciao Josh, molte grazie per la tua risposta, questo è un buon modo per descriverle e pensarle. Ho trovato un ottimo video su Channel 9 di Mike Taulty, basato su Silverlight ma altrettanto rilevante anche per WPF: http://channel9.msdn.com/blogs/matthijs/silverlight-4-a-guided-tour-of-the -managed-extensibility-framework-mef – jameschinnock

+0

IOC, quando fatto appropriatamente con DI, espone le interfacce che consentono di "conoscere" la funzionalità ma non la classe che la guida. Questo è semplicemente un progetto polimorfico al lavoro, ma aggiunge complexixity MEF è univoco in quanto genera al volo le DLL usando il reflection. Quindi consente di sostituire le DLL senza alterare il codice sorgente da altre basi di codice.Quindi sono completamente d'accordo con Josh su questa componente, tuttavia, non credo che sia un approccio ragionevole per la maggior parte delle persone. http://msdn.microsoft.com/en-us/library/ff648478.aspx http://msdn.microsoft.com/en-us/library/dd460648%28v=vs.110%29.aspx –

+0

MEF => Plug-in applicazione – orad

3

Date un'occhiata a questi 2 posti:

Per quanto riguarda Enterprise Library, in v5.0 abbiamo reso contenitore-agnostic. Anche se Enterprise Library viene fornito con il contenitore Unity, è progettato per funzionare con qualsiasi contenitore a scelta o MEF. È necessario fornire un configuratore appropriato (vedere le informazioni sui configuratori alla fine di questo summary)

+1

Ciao Grigori, grazie per i link, è fantastico! Ho ragione nel pensare che le principali differenze di alto livello tra Prism ed EntLib sono in realtà un modo diverso di progettare i programmi (esiste questa parola ?? :-))? Quindi Prsim usa i moduli - quindi si adatta a WPF Ui dev forse, mentre EntLib usa App Blocks, forse più lavoro relativo al server? Quale sarebbe un buon esempio di quando usare Entlib su Prism? Molte grazie ancora, molto apprezzato. – jameschinnock

+0

James, questi hanno in mente obiettivi diversi. Il prisma è specifico per l'architettura di interfacce utente composite (in WPF o Silverlight), mentre EntLib è una libreria generica (non specifica per livello) che risolve problemi trasversali comuni quali registrazione, convalida, gestione delle eccezioni, ecc. –

+0

Questa differenza sarebbe utile evidenziato da qualche parte, penso che – nicolas