在 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. Android开发者的Anko使用指南(一)之Intent

    使用Anko Intent帮助器可以添加如下依赖 dependencies { compile "org.jetbrains.anko:anko-commons:$anko_version& ...

  2. Linux 区别 chown和chmod的用法

    chown用法用来更改某个目录或文件的用户名和用户组的chown 用户名:组名 文件路径(可以是就对路径也可以是相对路径)例1:chown root:root /tmp/tmp1就是把tmp下的tmp ...

  3. 自动化单元测试工具 EvoSuite 的简单使用 【转载】

    转载:https://www.cnblogs.com/hughding/p/evosuite.html 一.EvoSuite简介 EvoSuite是由Sheffield等大学联合开发的一种开源工具,用 ...

  4. Drools规则引擎入门指南(一)

    最近项目需要增加风控系统,在经过一番调研以后决定使用Drools规则引擎.因为项目是基于SpringCloud的架构,所以此次学习使用了SpringBoot2.0版本结合Drools7.14.0.Fi ...

  5. 更新RecyclerView的好方法

    一般在使用RecyclerView的时候不免要修改RecyclerView的数据,使用notifyDataSetChanged()来刷新界面,但是当数据比较多,而只是修改了一点的数据,或者刷新比较频繁 ...

  6. Java 线程池的原理及实现

    1.线程池简介: 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线 ...

  7. Handshake failed due to invalid Upgrade header: null 解决方案

    Handshake failed due to invalid Upgrade header: null 解决方案 解决方案,在 Nginx ,location 中添加以下代码: proxy_set_ ...

  8. AI - 框架(Frameworks)

    1 - Scikit-Learn Sklearn(scikit-learn: machine learning in Python):https://scikit-learn.org/ 文档丰富而又详 ...

  9. Python - Fabric简介

    1 - Fabric Fabric是一个Python的库,提供了丰富的同SSH交互的接口,可以用来在本地或远程机器上自动化.流水化地执行Shell命令. 非常适合用来做应用的远程部署及系统维护.简单易 ...

  10. java基础-2

    java基础-2 面向对象 定义 面向对象是一种思维方式,相对于面向过程​面向过程注重流程中的每一步,清楚流程中的每一个细节​面向对象注重的是对象,有了对象就有对象的一届​自己动手做--面向过程,找其 ...