Domanda

Sono un po 'perso con il MEF, MAF, Unità ...

Questa domanda riguarda l'architettura dell'applicazione Winform.

Ho un progetto principale che contiene un modulo principale e alcune altre forme;

Perché voglio includere modularità , sto pensando di utilizzare un sistema di plugin.

Quello che vorrei fare è l'apertura di ogni plugin Dll , quando l'applicazione principale è aperto per fare riferimento a ciascuno con il tasto, barra degli strumenti ...

Poi mi piacerebbe Smaltire di loro fino a quando essi sono chiamati.

Ma non voglio tutti i plugin da tenere in memoria .. solo a ottenuto un modello di buona architettura.

Quindi, prima su .NET: Non dotNet tenere solo un di riferimento per i plugin DLL in memoria o tutti il codice del plugin

Sto pensando di utilizzare MEF con LAZY raccolta di importazione, ma ho bisogno di creare un'istanza di loro in primo luogo per ottenere i miei bottoni informazioni. Così seconda domanda

Se ho impostato la Collezione Importa per null e lauch il compose () la funzione di nuovo, i plugin sarà carico oppure attendere chiamata ad essere carico (pigro)?

È stato utile?

Soluzione

Poi mi piacerebbe disporre di loro fino a quando essi sono chiamati.

Invece di ispezionare oggetti importati e poi gettarli via, è necessario controllare l'importazione metadati . È possibile ottenere questo metadati importando Lazy<IFoo,IFooMetadata> o Lazy<IFoo,Dictionary<string,object>>. È possibile aggiungere questi metadati alle esportazioni con l'attributo ExportMetadata.

Quindi, prima su .NET:? Non dotNet mantenere solo un riferimento ai plugin DLL in memoria o tutto il codice del plugin

Una volta che un assembly viene caricato rimane in memoria, a meno che non si scarica l'intero dominio di applicazione.

Inoltre, non ci sono implementazioni out-of-the-box di ComposablePartCatalog in NET 4.0 che possono essere interrogati senza caricare il corrispondente complesso. Ma in teoria qualcosa di simile potrebbe essere fatto se si memorizza il posto metadati di fuori del montaggio. V'è un esempio di tale applicazione nella href="http://mef.codeplex.com" rel="nofollow"> .

Sto pensando di utilizzare MEF con LAZY collezione di importazione

Uso importazioni pigri non necessariamente impedire assiemi dal carico. Se si dispone di un riferimento a un oggetto Lazy<IFoo>, allora almeno il IFoo assembly contenente deve essere caricato. E come spiegato in precedenza, il gruppo contenente l'attuazione IFoo esportato anche essere stato caricato in quel punto.

Utilizzando Pigro sarà solo rimandare l'invocazione di alcuni costruttori, si spera con conseguente più rapido start-up della vostra applicazione.

scroll top