0

我再次需要你的帮助。我正在开发一个具有模块化概念的应用程序。

我想为此使用 Prism 和 Unity。我查看了 Prism 的快速入门示例,还阅读了 MSDN 上的这篇文章

我的实际代码如下所示:

public class Bootstrapper : UnityBootstrapper
{
    protected override DependencyObject CreateShell()
    {
        return this.Container.Resolve<Shell>();
    }

    protected override void InitializeShell()
    {
        base.InitializeShell();

        var window = this.Shell as Window;
        if (window != null)
        {
            Application.Current.MainWindow = window;
        }
        else
        {
            throw new ArgumentException("The shell has to be a window.");
        }
    }


    protected override IModuleCatalog CreateModuleCatalog()
    {
        return new ConfigurationModuleCatalog();
    } 
}

我的配置:

<configuration>
  <configSections>
    <section name="modules" 
             type="Microsoft.Practices.Prism.Modularity.ModulesConfigurationSection, Microsoft.Practices.Prism"/>
  </configSections>
  <modules>
    <module assemblyFile="Modules/MyApp.Module1.dll"
            moduleType="MyApp.Module1.Module1Module, MyApp.Module1"
            moduleName="Module1" />
  </modules>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

我现在有两个问题,第一个是目录没有正确加载。对我来说,似乎没有调用 load 方法,或者类似的东西。

第二个问题是我认为第一个问题的结果,即我的模块中的初始化方法没有被调用。

有谁能够帮助我?

4

1 回答 1

2

我在 Desktop Prism 项目中采用了您的代码,但它按预期工作。

在您的应用程序的某个地方,您将需要(至少):

var bootstrapper = new Bootstrapper();
bootstrapper.Run();

我相信对于 config 部分,默认是在启动时加载模块,所以一旦 Bootstrapper 运行,你的模块应该被加载和初始化。这正是我在当地发生的事情。

这就是我的模块“初始化”的样子:

using System;
using System.Windows;
using Microsoft.Practices.Prism.Modularity;

namespace MyApp.Module1
{
    class Module1Module : IModule
    {
        public void Initialize()
        {
            MessageBox.Show("Hello world!");
        }
    }
}

最后要检查的一件事是查看它是否可以在它正在查找的目录中找到 ,但如果不是这种情况MyApp.Module1.dll,您会在第一次机会异常ModuleTypeLoadingException之后 得到一个。FileNotFoundException

编辑:这是我制作的测试解决方案的完整源代码。我想不出有什么区别使它对我有用,但对你没有用。看看这个。

于 2013-04-02T22:12:42.140 回答