Sto provando il Managed Extensibility Framework per la prima volta in Visual Studio 2010 beta 2 utilizzando System.ComponentModel.Composition da .net-4.0.Indicare a MEF di utilizzare qualsiasi assembly disponibile
Non riesco a ottenere il CompositionContainer per trovare i miei assembly di implementazione utilizzando le due routine alternative di seguito.
Primo tentativo (questo ha funzionato in una versione precedente CodePlex del MEF):
var composition = new CompositionBatch();
composition.AddPart(this);
var container = new CompositionContainer(new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
container.Compose(composition);
Secondo tentativo (questo ha funzionato in beta 1, credo):
var aggregateCatalog = new AggregateCatalog(
new AssemblyCatalog(Assembly.GetExecutingAssembly()),
new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
var compositionContainer = new CompositionContainer(aggregateCatalog);
compositionContainer.ComposeParts(this);
C'è un modo nuovo per fare questo nella beta 2?
EDIT: Si è scoperto che non ha nulla a che fare con la composizione. Ho avuto una proprietà statica che rappresenta la mia implementazione importati:
[Import] public static ILog Log { get; set; }
che avrebbe dovuto essere:
[Import] public ILog Log { get; set; }
ho segnato la risposta di Daniel accettata perché il saggio consiglio di debug in modo più approfondito ha risolto il problema.
Sto usando Beta 2 per un paio di settimane e sono state usando il tuo secondo esempio, senza alcun problema. Avete parti interne nel vostro gruppo di esecuzione o si trovano nella BaseDirectory? Sei stato in grado di confermare a quale applicazione AppDomain.CurrentDomain.BaseDirectory corrisponde in fase di runtime? Inoltre, la classe che contiene gli snippet sopra riportati contiene le importazioni dichiarate? Mi sto solo assicurando che nulla verrà raccolto se l'istanza della classe (questo) non ha importazioni – JamesEggers
Devo fare qualcosa di stupido. Le implementazioni sono semplici mentre cerco di farlo funzionare. La BaseDirectory è valida, la classe ha le importazioni. Ancora, un po 'più di headscratching e ci arriverò alla fine. – grenade
Qualcuno può spiegare perché non è possibile usare [Importa] per una proprietà statica? – Dave