Come esportare un tipo di MEF, come se l'attributo di esportazione fosse stato applicato a quel tipo?

StackOverflow https://stackoverflow.com/questions/4209603

Domanda

I vorrebbe applicare dinamicamente l'attributo MEF Esporta in un tipo a run-time, esattamente come se il tipo aveva avuto un attributo di esportazione applicate in fase di compilazione.

C'è un modo semplice per fare questo?

A parte ciò, c'è un modo complesso per fare questo?

È stato utile?

Soluzione

Se si può permettersi di utilizzare .NET 4.5 (che significa l'abbandono del supporto di Windows XP), è ora possibile utilizzare del MEF registrazione attributo-meno alias modello di Convenzione .

In .NET4 o precedenti versioni di anteprima del MEF questo non è supportato dalla scatola, ma MEF può ancora essere esteso creando i propri implementazioni di ExportProvider o ComposablePartCatalog .

Il MEF Contrib perfetto Definizione Provider è tale implementazione che permette di registrare le importazioni e le esportazioni da chiamate di metodo.

Il MEF Contrib configurabile Definizione Fornire r è un altro che permette di impostare le importazioni e le esportazioni in un file XML.

Ancora un'altra opzione è quella di fare la registrazione con Autofac e l'utilizzo poi la sua MEF integrazione per rendere i componenti autofac disposizione MEF.

Altri suggerimenti

Io non sono sicuro al 100%, ma non credo che sia possibile fare con MEF. Un modello da utilizzare per fornire un comportamento simile anche se è il modello di fabbrica / fornitore.

interface IData {} 

interface IDataProvider {
  IData Data { get; set; }
}

[Export(IDataProvider)]
class DataProvider : IDataProvider {
  public IData { get; set; }
}

È possibile utilizzare questo modello per aggiornare dinamicamente l'attuazione IData al valore che si desidera utilizzare.

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