2009-06-24 8 views
11

Ho uno scenario in cui devo ottenere un'esportazione dall'istanza CompositionContainer ma ho solo un tipo con cui lavorare; Non conosco il tipo al momento della compilazione, quindi non posso recuperare l'oggetto esportato nel modo generico normale.Ottenere un'esportazione da un contenitore MEF dato solo un'istanza di tipo

Normalmente si dovrebbe fare questo:

_container.GetExportedObject<IMyType>(); 

Ma nel mio caso, ho questo:

Type someType = ... ; 
_container.HowDoIGetTheExport(someType); 

Tutte le idee?

risposta

20

trovato la risposta:

var export = _container.GetExports(someType, null, null).FirstOrDefault(); 
+0

Sì, questo è il metodo principale utilizzato dalla maggior parte degli overload generici, quindi è il modo migliore per ottenerlo. –

+7

Non dimenticare che la cosa che cerchi è in export.Value – Sam

1

Creare la chiamata dinamicamente utilizzando Type.MakeGeneric .....

http://geekswithblogs.net/marcel/archive/2007/03/24/109722.aspx

+1

Questo non mi aiuta chiamano un metodo generico sul contenitore. .. Non penso che tu abbia letto correttamente la mia domanda. –

+0

Vedo che hai una risposta specifica - eccellente. La mia risposta è più generale nel senso che da un tipo è possibile costruire una chiamata al metodo generico in fase di esecuzione. Usiamo questo per costruire chiamate in cui solo le interfacce sono conosciute al momento della compilazione, ma le istanze in esecuzione possono essere alimentate da fonti esterne. –

Problemi correlati