2012-09-20 17 views
13

Sadece WPF ve Caliburn.Micro'yu öğreniyorum. Burada sunulan kod takip ediyorum: http://caliburnmicro.codeplex.com/wikipage?title=Customizing%20The%20Bootstrapper&referringTitle=DocumentationCaliburn.Micro ve MEF on wpf

Görünüşe göre bu kod Silverlight içindir ama benim proje, WPF ve ben CompositionHost tanımlı olmadığından hatayı alıyorum bu nedenle.

Bu belge, kabı doğrudan wpf olarak başlatmam gerektiğini belirtti, ancak nasıl olduğunu gösteren bir belge yok. Konteyneri doğrudan nasıl başlatabilirim? Önyükleme strapper belgelerinde böyledir

Düzenleme 1 :

 container = CompositionHost.Initialize(
     new AggregateCatalog(
      AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>() 
      ) 
     ); 

    var batch = new CompositionBatch(); 

    batch.AddExportedValue<IWindowManager>(new WindowManager()); 
    batch.AddExportedValue<IEventAggregator>(new EventAggregator()); 
    batch.AddExportedValue(container); 

    container.Compose(batch); 

ve ben onu dönüştürülür:

var catalog = 
      new AggregateCatalog(
       AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>()); 

     this.container = new CompositionContainer(catalog); 
     var batch = new CompositionBatch(); 

     batch.AddExportedValue<IWindowManager>(new WindowManager()); 
     batch.AddExportedValue<IEventAggregator>(new EventAggregator()); 
     batch.AddExportedValue(this.container); 

     this.container.Compose(batch); 

Ama uygulamayı çalıştırdığınızda, ben hata alıyorum o MEF olamaz ISC'yi başlatmamı beklerim. EF doğru değil. Tamir etmeme yardım edebilir misin?

cevap

17

WPF'de açık bir CompositionContainer yapıcı kullanmanız gerekir. Benim WPF ve Silverlight paylaşılan Önyükleyici ben şu #if kullandık - #else direktifini:

#if SILVERLIGHT 
    container = CompositionHost.Initialize(catalog); 
#else 
    container = new CompositionContainer(catalog); ; 
#endif 

DÜZENLEME

IShell arabirimini uygulayan bir bileşeni belirleyecektir bootstrapper (sizin bootstrapper Bootstrapper<IShell> uzanan koşuluyla

temel sınıf), yani IShell MEF ihracatı ile dekore edilmiş bir sınıfı uygulamanız gerekiyor.

için genellikle ShellViewModel olacağını ve beyan şu şekilde görünecektir:

[Export(typeof(IShell))] 
public class ShellViewModel : PropertyChangedBase, IShell 
{ 
    ... 
} 

Sen bootstrapper kurulum ve özelleştirme here hakkında çok fazla bilgi bulabilirsiniz.

+0

Teşekkürler. Lütfen sormak için düzenlememe bakın. – mans

+0

@mans Lütfen cevap güncellememi görün. –