Domanda

Qualcuno ha lavorato molto con Microsoft Managed Extensibility Framework (MEF)?Un pò suona come si sta cercando di essere tutte le cose a tutte le persone - È un add-in manager!È il duck typing!Mi chiedo se qualcuno ha un'esperienza, positiva o negativa.

Attualmente stiamo pianificando l'uso di un generico Cio attuazione ala MvcContrib per il nostro prossimo grande progetto.Dovremmo buttare MEF nel mix?

È stato utile?

Soluzione

Non abbiamo la pretesa per il MEF per essere un all-purpose di Cio.Il modo migliore di pensare Cio aspetti del MEF, è un dettaglio di implementazione.Usiamo Cio come un modello, perché è un ottimo modo per affrontare i problemi che stiamo cercando di risolvere.

Il MEF è focalizzata sulla estensibilità.Quando si pensa di MEF guardare ad esso come un investimento nel prendere la nostra piattaforma in avanti.I nostri prodotti futuri, e la piattaforma si leva MEF come un meccanismo standard per l'aggiunta di estensibilità.Prodotti di terze parti e i quadri saranno anche in grado di sfruttare lo stesso meccanismo.La media di "utente" del MEF autore componenti MEF consuma e non sarà l'utilizzo diretto di MEF interno delle loro applicazioni.

Immaginate quando si desidera estendere la nostra piattaforma in futuro, è possibile eliminare una dll nella cartella bin e il gioco è fatto.Il MEF abilitato app si accende con la nuova estensione.Questa è la visione per il MEF.

Altri suggerimenti

Questo post si riferisce alla Managed Extensibility Framework Anteprima 2.

Così, ho avuto una corsa attraverso il MEF e ha scritto un veloce "Ciao Mondo", che viene presentato di seguito.Devo dire che è stato assolutamente facile per tuffarsi e capire.Il catalogo del sistema è grande e rende estendere MEF di per sé molto dritto in avanti.È banale per puntare a una directory di addin assemblee e farla gestire il resto.MEF del patrimonio ala Prisma sicuramente traspare, ma penso che sarebbe strano se non lo è, dato che entrambi i quadri sono circa la composizione.

Penso che la cosa che si attacca nella mia craw più è la "magia" di _container.Scrivi().Se si guarda al HelloMEF classe, vedrai che i saluti del campo non è mai inizializzato dal codice, che si sente solo divertente.Penso che io preferisco il modo IoC container di lavoro, in cui si chiedono esplicitamente il contenitore per costruire un oggetto per voi.Mi chiedo se una sorta di "Nulla" o "Vuoto" generico inizializzatore potrebbe essere in ordine.cioè

private IGreetings greetings = CompositionServices.Empty<IGreetings>();

Che almeno si riempie l'oggetto con "qualcosa" fino a quando il contenitore composizione codice viene eseguito per riempire con un vero e proprio "qualcosa".Non lo so, si sa un po ' di Visual Basic Vuoto o Nulla delle parole chiave, che ho sempre aborrito.Se qualcuno ha qualche pensiero su questo, mi piacerebbe sentire anche loro.Forse è qualcosa che ho solo bisogno di ottenere oltre.Esso è contrassegnato con un grosso e grasso [Import] attributo, quindi non è come è un mistero o nulla.

Controllare la durata di un oggetto, non è scontato, ma tutto è un singleton per impostazione predefinita a meno che non si aggiunge un [CompositionOptions] attributo di classe esportata.Che ti consente di specificare una Fabbrica o di un Singleton.Sarebbe bello vedere in Pool aggiunto a questa lista, a un certo punto.

Io non sono molto chiaro su come l'anatra caratteristiche di battitura di lavoro.Sembra più come i meta-dati di iniezione alla creazione dell'oggetto, piuttosto che il duck typing.E sembra che si può solo aggiungere un ulteriore anatra.Ma come ho detto, io non sono molto chiaro su come queste funzionalità lavorare ancora.Spero di poter tornare indietro e riempire questo in seguito.

Penso che sarebbe una buona idea ombra copiare le Dll vengono caricate da DirectoryPartCatalog.Adesso le Dll sono bloccato dopo MEF, si ottiene una sospensione di loro.Questo consentirebbe anche di aggiungere una directory watcher e prendere aggiornati addins.Che sarebbe un po ' dolce...

Infine, sono preoccupato per come attendibile il componente Dll sono e come, o se, il MEF si comportano in un ambiente parzialmente attendibile.Ho il sospetto che le applicazioni usando il MEF richiederà la piena fiducia.Potrebbe anche essere prudente per caricare i componenti aggiuntivi nel loro dominio di applicazione.So che sa un po ' di Sistema.AddIn, ma permetterebbe molto chiara separazione tra addins utente e di sistema addins.

Va bene - basta blaterare.Ecco Hello World in MEF e C#.Enjoy!

using System;
using System.ComponentModel.Composition;
using System.Reflection;

namespace HelloMEF
{
    public interface IGreetings
    {
        void Hello();
    }

    [Export(typeof(IGreetings))]
    public class Greetings : IGreetings
    {
        public void Hello()
        {
            Console.WriteLine("Hello world!");
        }
    }

    class HelloMEF : IDisposable
    {
        private readonly CompositionContainer _container;

        [Import(typeof(IGreetings))]
        private IGreetings greetings = null;

        public HelloMEF()
        {
            var catalog = new AggregateCatalog();
            catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
            _container = new CompositionContainer(catalog);
            var batch = new CompositionBatch();
            batch.AddPart(this);
            container.Compose(batch);

        }

        public void Run()
        {
            greetings.Hello();
        }

        public void Dispose()
        {
            _container.Dispose();
        }

        static void Main()
        {
            using (var helloMef = new HelloMEF())
                helloMef.Run();
        }
    }
}

Andy domanda di sicurezza per le estensioni MEF carichi (mi dispiace non avere abbastanza punti ancora :) ), il luogo per affrontare questo è in un Catalogo.MEF cataloghi sono completamente plug, in modo da poter scrivere un catalogo personalizzato per la convalida di montaggio chiavi, ecc prima di caricare.Si potrebbe anche utilizzare CAS, se lo si desidera.Stiamo cercando fornendo eventualmente ganci per consentire di fare questo senza dover scrivere un catalogo.Tuttavia, la fonte per i cataloghi correnti è liberamente disponibile.Ho il sospetto che il minimo è qualcuno (magari il nostro team, implementerà uno e gettarlo in un interno/contrib progetto su CodePlex.

Il Duck typing non spedisce in V1 se è in caduta di tensione.In un futuro In discesa sostituirlo con un plug adattatore meccanismo di cui uno potrebbe hook duck typing meccanismo.Il motivo per cui abbiamo guardato il duck typing è quello di indirizzo e di controllo delle versioni scenari.Con il Duck Typing è possibile rimuovere i riferimenti condivisi tra esportatori e importatori, permettendo così di più versioni di un contratto a vivere fianco a fianco.

Andy, credo Glenn Blocco risponde a molte delle persone (naturale) a domande come queste, in questo thread su MSDN MEF Forum:

Confronto di CompositionContainer con la tradizionale IoC Container .

Per una laurea, Artem la risposta di cui sopra è corretta relativamente al l'intento principale dietro il MEF, che è l'estensibilità e non la composizione.Se sei interessato principalmente la composizione, quindi utilizzare uno dei soliti Cio sospetti.Se, al suo fianco, si sono principalmente interessati con l'estensibilità, quindi l'introduzione di cataloghi delle parti, il tagging dei metadati, il duck typing, e carico differito, per alcune interessanti possibilità.Inoltre, Krzysztof Cwalina prende un colpo qui spiegare le modalità di MEF e del Sistema.Addins si riferiscono l'uno all'altro.

Non è un'iniezione di controllo contenitore.È un plug-in del quadro di sostegno.

Direi che dato che sta per appendere fuori della 'Sistema' di spazio dei nomi nel .NET Framework 4.0 che non si poteva andare troppo lontano sbagliato.Sarà interessante vedere come il MEF si evolve e che influenza Hamilton Verissimo (Castello) ha il MEF direzione.

Se ciarlatani come un'anatra, che potrebbe essere parte del gregge di IoC container...

Una discussione più dettagliata su questo in questo post e i commenti

http://mikehadlow.blogspot.com/2008/09/managed-extensibility-framework-why.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top