在 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

Prism 学习:从本地目录加载 Module的更多相关文章

  1. Prism 学习:从配置文件中加载 Module

    之前我们已经了解过,如何从指定的目录中来加载 Module(原文),现在我们来看,如何从应用程序的配置文件中来加载 Module.以这种方式来加载 Module 的优点包括:1. 被加载的 Modul ...

  2. Springboot学习01- 配置文件加载优先顺序和本地配置加载

    Springboot学习01-配置文件加载优先顺序和本地配置加载 1-项目内部配置文件加载优先顺序 spring boot 启动会扫描以下位置的application.properties或者appl ...

  3. ios网络学习------4 UIWebView的加载本地数据的三种方式

    ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...

  4. springcloud项目配置拓展从本地config目录加载

    本文受阿里开源的Nacos启发,应用启动后从Nacos服务加载配置到应用中,想着本地开发的时候加载配置能否从本地存储中加载,这样也能加快开发效率 首先我们来看下SpringCloud项目应用Nacos ...

  5. Prism 源码解读3-Modules加载

    介绍 在软件开发过程中,总想组件式的开发方式,各个组件之间最好互不影响,独立测试.Prism的Modules很好的满足了这一点. 这个架构图很好了讲解了Prism的Modules的概念 Prism支持 ...

  6. Java虚拟机JVM学习02 类的加载概述

    Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...

  7. thinkphp学习笔记9—自动加载

    原文:thinkphp学习笔记9-自动加载 1.命名空间自动加载 在3.2版本中不需要手动加载类库文件,可以很方便的完成自动加载. 系统可以根据类的命名空间自动定位到类库文件,例如定义了一个类Org\ ...

  8. Unity -- AssetBundle(本地资源加载和加载依赖关系)

    1.本地资源加载 1).建立Editor文件夹 2).建立StreamingAssets文件夹和其Windows的子文件夹 将下方第一个脚本放入Editor 里面 脚本一  资源打包AssetBund ...

  9. tensorflowjs下载源文件到本地不能加载模型解决方案

    大多数情况(非源文件错误)下载源文件到本地不能加载模型,那么你可能需要搭建一个本地WEB服务器. 1.安装apache或ngnix,可以参照这个博客 2.强烈推荐一个Chrome插件Web Serve ...

随机推荐

  1. swarm集群日常部分操作

    docker swarm: 1)查看集群使用docker info 或 docker node ls 查看集群中的相关信息 2)swarm集群中node的availability状态可以为 activ ...

  2. Java中基本数据和包装类的比较

    public class AutoBoxTest { public static void main(String[] args) { Integer a1 = 127; Integer a2 = 1 ...

  3. yield(),wait(),sleep(),join()

    yield(),wait(),sleep(),join()yield()虽然可以让线程由“运行状态”进入到“就绪状态”:但是,它不一定会让其它线程获取CPU执行权(即,其它线程进入到“运行状态”),即 ...

  4. 使用C++版本Mxnett进行预测的注意事项

    现在越来越多的人选择Mxnet作为深度学习框架,相应的中文社区非常活跃,而且后面推出的gluon以及gluoncv非常适合上手和实验,特别是gluoncv中提供了非常多.非常新的预训练model zo ...

  5. 每天学点SpringCloud(一):使用SpringBoot2.0.3整合SpringCloud

    最近开始学习SpringCloud,在此把我学习的过程记录起来,跟大家分享一下,一起学习.想学习SpringCloud的同学赶快上车吧. 本次学习使用得SpringBoot版本为2.0.3.RELEA ...

  6. Java核心技术卷一基础技术-第13章-集合-读书笔记

    第13章 集合 本章内容: * 集合接口 * 具体的集合 * 集合框架 * 算法 * 遗留的集合 13.1 集合接口 Enumeration接口提供了一种用于访问任意容器中各个元素的抽象机制. 13. ...

  7. Eclipse 配置 Tomcat 服务器

    配置Tomcat 在首先外部安装好Tomcat,然后在eclipse配置Tomcat服务器: 选择要配置的Tomcat版本: 注意:这一步如果勾选了Create a new local server ...

  8. Day3:html和css

    Day3:html和css 多类名选择器 样式的显示效果是跟html元素中的类名先后顺序无关,而是跟css样式的书写上下顺序有关. <!DOCTYPE html> <html lan ...

  9. Debian/Ubuntu清理硬盘空间的8个技巧

    1. 删除残余的配置文件 通常Debian/Ubuntu删除软件包可以用两条命令 sudo apt-get remove <package-name> sudo apt-get purge ...

  10. 解决SVN不显示绿色图标问题

    今天是上班的第50天,发现项目上的svn绿色图标没有了,于是上网查了一下,然后很简单的就找到了解决办法: 修改注册表 Windows Explorer Shell支持Overlay Icon最多15个 ...