Estoy probando el Framework de Extensibilidad Administrado por primera vez en Visual Studio 2010 beta 2 usando System.ComponentModel.Composition desde .net-4.0.Indique a MEF que use cualquier conjunto disponible
No he podido obtener CompositionContainer para encontrar mis ensamblajes de implementación usando las dos rutinas alternativas a continuación.
primer intento (esto funcionó en un comunicado de CodePlex mayor de MEF):
var composition = new CompositionBatch();
composition.AddPart(this);
var container = new CompositionContainer(new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
container.Compose(composition);
Segundo intento (esto funcionó en beta 1, creo):
var aggregateCatalog = new AggregateCatalog(
new AssemblyCatalog(Assembly.GetExecutingAssembly()),
new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
var compositionContainer = new CompositionContainer(aggregateCatalog);
compositionContainer.ComposeParts(this);
¿Hay una nueva forma hacer esto en beta 2?
EDITAR: Resultó que no tenía nada que ver con la composición. Tenía una propiedad estática que representa mi aplicación importada:
[Import] public static ILog Log { get; set; }
que debería haber sido:
[Import] public ILog Log { get; set; }
que marcó la respuesta de Daniel como aceptada porque el sabio consejo de depuración de una manera más exhaustiva resolvió el problema.
He estado usando Beta 2 durante unas semanas y ahora han estado utilizando su segundo ejemplo sin ningún problema. ¿Tiene partes internas en su ensamblaje en ejecución o solo están ubicadas en BaseDirectory? ¿Ha podido confirmar a qué AppDomain.CurrentDomain.BaseDirectory se asigna en tiempo de ejecución? Además, ¿la clase que contiene los fragmentos anteriores contiene alguna Importación declarada? Solo me aseguro de que no se recogerá nada si la instancia de la clase (esto) no tiene ninguna importación. – JamesEggers
Debo estar haciendo algo tonto. Las implementaciones son simples mientras trato de hacerlo funcionar. BaseDirectory es válido, la clase tiene las importaciones. Aún así, un poco más irritante y llegaré al final. – grenade
¿Alguien puede explicar por qué no es posible usar [Importar] para una propiedad estática? – Dave