Ich verwende den neuesten PRISM 4.2. Leider wird das Tutorial des Ereignisaggregators in der Dokumentation nicht über MEF, sondern über Unity gesteuert. Und ich kann es nicht unter MEF laufen lassen.Wie Ereignis Aggregator in MEF verwenden?
App.xaml.cs
public partial class App : Application
{
[Import]
public IEventAggregator eventAggregator;
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
Bootstrapper bootstrapper = new Bootstrapper();
bootstrapper.Run();
}
}
Bootstrapper.cs
public class Bootstrapper : MefBootstrapper
{
protected override DependencyObject CreateShell()
{
return new MainWindow();
}
protected override void InitializeShell()
{
base.InitializeShell();
App.Current.MainWindow = (Window)Shell;
App.Current.MainWindow.Show();
}
protected override void ConfigureAggregateCatalog()
{
base.ConfigureAggregateCatalog();
AggregateCatalog.Catalogs.Add(new AssemblyCatalog(this.GetType().Assembly));
}
protected override IModuleCatalog CreateModuleCatalog()
{
ModuleCatalog moduleCatalog = new ModuleCatalog();
return moduleCatalog;
}
}
MainWindow.xaml.cs
public partial class MainWindow : Window, IView
{
public MainWindow()
{
InitializeComponent();
DataContext = new MainViewModel();
}
}
MainViewModel.cs:
[ModuleExport(typeof(MainViewModel))]
public class MainViewModel : BindableBase, IServiceCallback
{
[Import]
public IEventAggregator eventAggregator;
[ImportingConstructor]
public MainViewModel()
{
eventAggregator.GetEvent<AppExitEvent>().Publish("");
}
}
Trotz der [import]
des Ereignis-Aggregator ist immer null sowohl in App.xaml.cs und in MainViewModel. Warum das?
Die zweite Frage ist, muss ich meine Viewmodels als Modul exportieren (wie ich oben getan habe), um einen geraden Aggregator in ihnen zu verwenden?
UPDATE:
Proof, die neueste Version von PRISM nicht ComposeExportedValue
mehr unterstützt.
'System.ComponentModel.Composition.Hosting.CompositionContainer' hat keine Definition für 'ComposeExportedValue' enthalten und keine Erweiterungsmethode ...
Ja, das half. Danke vielmals. – Houman
Froh, das zu hören. Hast du irgendwelche Vorschläge für meine Antwort, die dich nicht auf den neuesten Stand gebracht haben? Highlights, schlechte Erklärung vielleicht? Vielen Dank. – GOstrowsky
Fertig. Akzeptierte Antwort auch. ;) – Houman