Come esportare un tipo di MEF, come se l'attributo di esportazione fosse stato applicato a quel tipo?
-
25-09-2019 - |
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?
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.