我正在運行最新的PRISM 4.2。不幸的是,文檔中的Event Aggregator教程是通過Unity而不是MEF驅動的。我無法在MEF下運行。如何在MEF中使用事件聚合器?
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("");
}
}
儘管[import]
事件聚合總是空無論是在App.xaml.cs和MainViewModel。這是爲什麼?
第二個問題是我必須將我的Viewmodels作爲模塊導出(就像我上面所做的那樣)以在其中使用一個聚合器?
UPDATE:
證明的PRISM最新版本不支持ComposeExportedValue
了。
'System.ComponentModel.Composition.Hosting.CompositionContainer' 並不 不包含 'ComposeExportedValue' 和沒有擴展 方法的定義...
是的,這有幫助。非常感謝。 – Houman
很高興聽到這個消息。但是,你有沒有對我的答案有任何建議,但沒有讓你高興呢?亮點,可能的問題解釋不好?謝謝。 – GOstrowsky
完成。接受的答案也是如此。 ;) – Houman