2010-07-23 19 views
6

Bunu öğrenmek için basit bir MEF demo yazmaya çalışıyorum. this eğitimini izliyorum, ancak modası geçmiş gibi görünüyor. Karşıdan yüklenebilir örnek çalışır, ancak 2 sürümü daha büyük olan (2008.9.4.0), FrameworkWindows 4 ile gelen geçerli bir (4.0) sürümden oluşur.MEF: DirectoryPartCatalog

Özellikle, herhangi bir yerde bulamadığım DirectoryPartCatalog kullanır. En yeni kütüphane. MEF'nin geçerli sürümü olan bir dizinden takılabilir derlemeleri nasıl keşfedeceğimiz konusunda bir örnek verebilir misiniz?

Teşekkür

cevap

6

aradıklarını,

+0

Bunun için teşekkürler, çok fazla sorunumu giderdi. – Erin

+0

Bu çok kullanışlıdır! Teşekkürler! –

2

DirectoryPartCatalog Şimdilik bu örnek derleme yapmak ve Sistemin yerleşik sürümü ile çalışacak şekilde birkaç değişiklik yapmak için gereken her DirectoryCatalog

2

bence DirectoryCatalog denir. 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(); 
    } 
}