• Prism 学习:从本地目录加载 Module


        在 Prism 中,将外部模块加载到主程序有以下几种方式:Code、XAML、配置文件、指定模块目录;其中,如果要使用 Code 方式来加载 Module,则需要将该 Module 引用到当前项目中;而后面两种通过 XAML与配置文件,在原理上大体一致;本文主要讨论第四种方法,即通过指定 Module 所在的目录来加载 Module。

        首先,我们需要在 Bootstrapper 类中重载 CreateModuleCatelog 方法,在该方法中定义一个 DirectoryModuleCatalog 对象,并为其指定 ModulePath,代码如下:

            protected override IModuleCatalog CreateModuleCatalog()
            {
                DirectoryModuleCatalog catelog = new DirectoryModuleCatalog();
                catelog.ModulePath = @".\Modules";
                return catelog;
            }

        接下来,我们要把被加载的 Module 所在的类库文件(.dll)复制该在 ModulePath 中指定的文件夹。

        提示:如果你的主项目与 Module 项目在同一个解决方案中,则可以配置 Module 项目的 Build Events,在 Post-build event command line 处填上以下命令:

    copy $(TargetDir)$(TargetFileName) "$(SolutionDir)PrismModuleDemo\$(OutDir)Modules" /Y

        其中 PrismModuleDemo 应该是你的主项目文件夹名称。如下图:

        然后,当我们运行项目时,Prism 就会在指定的文件夹中找出所有的 Module 并将其添加到 ModuleCatelog 中,并完成加载。

    按需加载

        在上述情况中,所有在该目录下的模块会在程序启动时,就会被加载。如果要实现按需加载(Loading Modules on Demand),则可以通过更改 Module 类的属性(Attribute)来实现: 

        [Module(ModuleName = "ModuleA", OnDemand = true)]
        public class ModuleA : IModule
        {
            public void Initialize()
            {
                // some logic
            }
        }

        通过指定 OnDemand = true,则可设定该模块为按需加载。当在程序中需要加载该模块时,可以通过 IModuleManager 的 LoadModule 方法可以将其加载进来:

            private void Button_Click(object sender, RoutedEventArgs e)
            {
                this.ModuleManager.LoadModule("ModuleA");
            }

    参考网址:

    https://msdn.microsoft.com/en-us/library/gg405479(v=pandp.40).aspx

    作者:WPInfo

    本文系作者原创,欢迎转载;如需转载,请注明出处。

    公众号:.NET之窗 (WinDotNET),更多原创、优质技术文章,欢迎扫码关注。

  • 相关阅读:
    Xcode 6 下添加pch头文件
    兵器簿之github的配置和使用
    sql 2005性能调优
    C#遍历枚举(Enum)值
    使用 jQuery 调用 ASP.NET AJAX Page Method
    强制不使用“兼容性视图”的HTML代码
    HR在ERP实施过程中的作用
    WdatePicker日历添加事件,在任意月改变时处理日期事件
    JQuery实现表格自动增加行,对新行添加事件
    获取元素离文档各边的距离
  • 原文地址:https://www.cnblogs.com/wpinfo/p/4571694.html
Copyright © 2020-2023  润新知