• Prism入门之模块(Module)


    通过约定的方式去约束它,Prism通过约定俗成的定义去查找他

    一、创建模块项目

    1、首先创建WPF项目,再将里面的默认文件删掉并将项目输出类型更改为类库

    image-20210816220019346

    image-20210816215152917

    image-20210816215221779

    2、接着创建模块的配置文件,做法类似于MEF/MAF框架(用于设计模块化项目的框架)这里不详细展开细说。

    安装Prism.Droc包

    image-20210816215603514

    3、完事需要在该配置文件中继承IModule,并实现所需接口

    image-20210816215740350

    4、还需要像在App.cs中一样在RegisterTypes方法中注册视图

    RegisterTypes(IContainerRegistry containerRegistry)
            {
                containerRegistry.RegisterForNavigation<ViewA>();
            }
    

    ModuleB也同样如法炮制

    二、在宿主程序中添加刚才创建的模块

    1、重写ConfigureModuleCatalog方法,使用IModuleCatalog添加模块

    image-20210816221000853

    protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
            {
                moduleCatalog.AddModule<ModuleAProfile>();
                moduleCatalog.AddModule<ModuleBProfile>();
                base.ConfigureModuleCatalog(moduleCatalog);
            }
    

    运行效果:

    2

    通过上面我们可以发现一个弊端,就是宿主程序与模块之间有强引用关系,我们在ConfigureModuleCatalog函数中通过AddModule将模块A或B中的配置文件加载了进去,一旦需要移除或添加新的模块肯定需要改动代码。我们可以通过一定的约束,通过路径去找到某个路径下的模块添加进去。

    三、通过文件夹加载模块

    我们只需要在App.cs中重写Prism框架中的CreateModuleCatalog方法,返回一个路径,框架本身会通过约定俗成的约定去查找模块

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

    在生产环境中更推荐使用后面这种方式去使用模块

  • 相关阅读:
    使用SharePoint PeopleEditor控件
    python快排的三种写法
    js获取浏览器屏幕高度、宽度等
    Spring总结> 第一结 概述
    js设置body高度、宽度为浏览器窗口高度、宽度
    简单的Spring调用jdbc.porperties配置信息,以mysql为例
    SSM(Spring + Spring MVC + MyBatis)整合
    【原创】MS SQL2005 存储过程分页(简洁型)后续完善更新中......
    【转载】动态sql语句基本语法
    Provider模式Demo
  • 原文地址:https://www.cnblogs.com/chonglu/p/15150371.html
Copyright © 2020-2023  润新知