【问题标题】:Unity & Prism Modularity - Load problemsUnity & Prism Modularity - 负载问题
【发布时间】:2013-04-02 20:54:30
【问题描述】:

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

我想为此使用 Prism 和 Unity。我查看了 Prism 的快速入门示例,并且还在 MSDN 上阅读了此 article

我的实际代码如下:

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 方法,或者类似的东西。

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

有人可以帮我吗?

【问题讨论】:

    标签: c# wpf prism unity-container


    【解决方案1】:

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

    在您的应用程序中,您将需要(至少):

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

    我相信对于配置部分,默认是在启动时加载模块,所以一旦 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,但如果这不是FileNotFoundException first-chance 异常,你会得到ModuleTypeLoadingException案例。

    编辑:这里是the complete source code,用于我制作的测试解决方案。我想不出有什么区别使它对我有用,但对你没有用。看看吧。

    【讨论】:

    • 感谢您的回复。抱歉忘记发布我的 App.xaml.cs 代码。我覆盖 on Startup 并在那里启动我的引导程序。我的模块类与你的大部分相同,我只有另一个测试字符串:-) 最后是的,文件在正确的文件夹中,我没有得到任何异常。但是还是不行。
    • @Sukram:我也是这么做的,我已经压缩了解决方案的源代码,因为我想不出有什么不同的地方。
    • @ Thorarin:感谢您的代码,我没有发现任何与我的代码不同的地方,但它可以工作。我根据您的课程建立了一个新项目,现在它工作正常。感谢您的帮助和代码示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多