2010-07-23 12 views
6

Estoy tratando de escribir una demo simple MEF para obtener más información al respecto. Estoy siguiendo el tutorial this, pero parece estar desactualizado. El ejemplo descargable funciona, pero usa un ensamblaje incluido que tiene 2 versiones anteriores (2008.9.4.0) que el actual (4.0) que se envía con Framwework 4.MEF: DirectoryPartCatalog

En particular, usa DirectoryPartCatalog que no puedo encontrar en ningún lado la biblioteca más nueva ¿Podría alguien dar un ejemplo sobre cómo descubrir ensamblajes enchufables desde un directorio con la versión actual de MEF?

Gracias

Respuesta

6

Es necesario hacer varios cambios para hacer esta compilación de ejemplo y ejecutar con la versión incorporada del sistema. ComponentModel.Composition.

class Program 
{ 
    [ImportMany] // [Import] 
    public IEnumerable<string> Messages { get; set; } 

    [ImportMany] // [Import] 
    public IEnumerable<IOutputString> OutputSet { get; set; } 

    [Import("OutputMessages")] 
    public Action<IEnumerable<IOutputString>, IEnumerable<string>> OutputMessages { get; set; } 

    public void Run() 
    { 

     var catalog = new AggregateCatalog(); // AggregatingComposablePartCatalog 
     catalog.Catalogs.Add(new DirectoryCatalog(@"..\..\..\ExternalMessages\bin\Debug")); // DirectoryPartCatalog 
     catalog.Catalogs.Add(new DirectoryCatalog(@"..\..\..\ExtraMessages")); // DirectoryPartCatalog 
     catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly())); // AttributedAssemblyPartCatalog 
     var container = new CompositionContainer(catalog); // CompositionContainer(catalog.CreateResolver()); 

     // container.AddPart(this); 
     // container.Compose(); 
     container.ComposeParts(this); 

     OutputMessages(OutputSet, Messages); 

    } 

    static void Main(string[] args) 
    { 
     Program p = new Program(); 
     p.Run(); 
    } 
} 
+0

Gracias por esto solucionó muchos de mis problemas. – Erin

+0

¡Esto fue extremadamente útil! ¡Gracias! –