2010-07-23 12 views
6

Próbuję napisać proste demo o wersji MEF, aby się o tym dowiedzieć. Śledzę samouczek this, ale wydaje się on nieaktualny. Ten przykład do pobrania działa, ale używa dołączonego zestawu, który ma 2 wersje starsze (2008.9.4.0) niż bieżący (4.0), który jest dostarczany z Framwework 4.MEF: DirectoryPartCatalog

W szczególności używa DirectoryPartCatalog, którego nie mogę znaleźć nigdzie in najnowsza biblioteka. Czy ktoś mógłby podać przykład, jak odkryć wtykowe złoŜa z katalogu z aktualną wersją MEF?

Dzięki

Odpowiedz

6

trzeba dokonać kilku zmian, aby ten przykładowy skompilować i uruchomić z wbudowanym wersji systemu. 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

Dzięki za naprawienie wielu moich problemów. – Erin

+0

To było bardzo przydatne! Dzięki! –