事件不会跨模块触发(prism、MVVM、silverlight c#)

事件不会跨模块触发(prism、MVVM、silverlight c#),c#,.net,wpf,silverlight,prism,C#,.net,Wpf,Silverlight,Prism,是的,哦,现在我相信我把这个应用程序设置好了,但是如果我错了,请纠正我,简单地说,我在我的引导程序中加载了3个模块,一个是导航模块,另外两个是视图 如果我加载模块并在initialize方法中将它们添加到一个工作正常的区域,那么在代码中是独立的,当然我想要更多的控制 现在在导航视图模型中,我有一个事件聚合器,它发布一个事件(如果这很重要,则从EventArgs继承的类),其他两个模块已经订阅了这个事件,但都没有收到它 /// <summary> /// Carries the

是的,哦,现在我相信我把这个应用程序设置好了,但是如果我错了,请纠正我,简单地说,我在我的引导程序中加载了3个模块,一个是导航模块,另外两个是视图

如果我加载模块并在initialize方法中将它们添加到一个工作正常的区域,那么在代码中是独立的,当然我想要更多的控制

现在在导航视图模型中,我有一个事件聚合器,它发布一个事件(如果这很重要,则从EventArgs继承的类),其他两个模块已经订阅了这个事件,但都没有收到它

/// <summary>
    /// Carries the out menu item selection methods.
    /// </summary>
    /// <param name="e">The <see cref="TMBL.Web.TMBLCore.Controls.Assets.NavigationViewSelectionEventArgs"/> instance containing the event data.</param>
    public void CarryOutMenuItemSelectionMethods(NavigationViewSelectionEventArgs e)
    {
        _eventAggregator.GetEvent<NavigationMenuItemSelectedEvent>().Publish(e);
    }
或者事件聚合器应该以不同的方式访问viewmodels吗


感谢您抽出时间

您正在正确注入事件聚合器,但有几件事需要检查

1) 事件聚合器实例是应用程序的全局实例,而不是由每个模块创建的。同一实例必须跨模块使用。这应该在应用程序引导程序中创建并传递给每个模块

2) NavigationMenuItemSelectionEvent是否在跨模块共享的公共程序集中定义?如果是这种情况(如我所料),那么请确保在模块之间使用相同的程序集。当您使用调试器加载应用程序并使用模块窗口(调试>窗口菜单)查看加载的程序集时,可以检查这一点。该程序集只能列出一次

如果您多次看到公共程序集被加载,那么可能是因为您正在从不同的目录加载模块,并且公共程序集没有签名。Net会将它们视为单独的,因此NavigationMenuItemSelectionEvent类型将不匹配


要么对程序集进行签名,确保所有模块都使用相同的程序集实例,要么确保所有模块都从同一目录加载(如果应用程序也使用公共程序集,则包括该应用程序)。

好的堆栈溢出丢失了我漂亮的大答复。所以我需要在我的引导程序中有一个事件聚合器实例,因为所有模块都需要使用相同的服务,这对我来说很有意义。然而,我认为依赖注入可以解决这个问题,我需要在我的引导程序中有一个事件聚合器的实例?我的问题有两个:首先,如何实例化它

 protected override DependencyObject CreateShell()
    {
        _eventAggregator = new EventAggregator();
        var shell = Container.Resolve<Shell>();
        Application.Current.RootVisual = shell;
        return shell;
    }

然后如何将事件聚合器传递到每个模块中。我用谷歌快速搜索了一下,但还没有找到这些信息,很抱歉我的无知

好的,在几次失败的尝试后,我终于找到了它,当我注册事件聚合器的实例时,我不得不告诉它将其视为单例容器;也很抱歉stackoverflow将我签入了一个临时账户,而不是我自己的账户,我不知道如何回到这个账户来接受你的回答,道歉,非常感谢team@stackoverflow.com他们应该能够合并这两个帐户。
_displayNewsView = new DisplayNewsView(new DisplayNewsViewModel(_eventAggregator));
 protected override DependencyObject CreateShell()
    {
        _eventAggregator = new EventAggregator();
        var shell = Container.Resolve<Shell>();
        Application.Current.RootVisual = shell;
        return shell;
    }
 protected override IModuleCatalog GetModuleCatalog()
    {
        var catalog = new ModuleCatalog();
        catalog.AddModule(typeof(TMBLCoreModule), InitializationMode.WhenAvailable);
        catalog.AddModule(typeof(NewsModule), InitializationMode.WhenAvailable);
        catalog.AddModule(typeof(UserModule), InitializationMode.WhenAvailable);
        return catalog;
    }