从PRISM开始学WPF(四)Prism-Module?

简介: 原文:从PRISM开始学WPF(四)Prism-Module?从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Module? 从PRISM开始学WPF(五...
原文: 从PRISM开始学WPF(四)Prism-Module?

从PRISM开始学WPF(一)WPF?

从PRISM开始学WPF(二)Prism?

从PRISM开始学WPF(三)Prism-Region?

从PRISM开始学WPF(四)Prism-Module?

从PRISM开始学WPF(五)MVVM(一)ViewModel?

从PRISM开始学WPF(六)MVVM(二)Command?

从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator?

0x4Modules

Modules是能够独立开发、测试、部署的功能单元,Modules可以被设计成实现特定业务逻辑的模块(如Profile Management),也可以被设计成实现通用基础设施或服务的模块(如Logging、Exception Management)。

既然Modules能够独立开发、测试、部署,那么如何告诉Shell(我们的宿主程序)去Load哪些Module,以怎样的形式Load这些Module呢?Prism为此提供了一个叫ModuleCatalog的东西。他用这个来管理Module。所以在App启动之初,需要创建配置一个ModuleCatalog。

先新增一个WpfApp项目,命名ModuleA,删除App.config和App.xaml,然后将outputType改为Class Library。

在Views文件夹下面新建一个用户控件ViewA

新增一个类ModuleAModule.cs实现IModule接口(每一个Module类都要实现这个接口,而每一个Module都要有这样一个类来对Module里的资源统一管理)

using ModuleA.Views;
using Prism.Modularity;
using Prism.Regions;

namespace ModuleA
{
    public class ModuleAModule : IModule
    {
        IRegionManager _regionManager;

        public ModuleAModule(RegionManager regionManager)
        {
            _regionManager = regionManager;
        }

        public void Initialize()
        {
            _regionManager.RegisterViewWithRegion("ContentRegion", typeof(ViewA));
        }
    }
}

他通过View Discovery的方式,将ModuleA的ViewA与_regionManager(这里是依赖注入)的Region"ContentRegion"进行关联。

那么,ModuleCatalog是怎样让Shell加载ModuleA的呢?,,ԾㅂԾ,,

代码

先在shell所在module添加ModuleA引用,然后:

Bootstrapper.cs中重写ConfigureModuleCatalog

        protected override void ConfigureModuleCatalog()
        {
            var catalog = (ModuleCatalog)ModuleCatalog;
            catalog.AddModule(typeof(ModuleAModule));
        }

啊妹子,炒鸡简单有没有?

配置文件

Bootstrapper.cs中重写CreateModuleCatalog

        protected override IModuleCatalog CreateModuleCatalog()
        {
            return new ConfigurationModuleCatalog();
        }

这表示,ModuleCatalog将从配置文件中创建。

App.config中添加了

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="modules" type="Prism.Modularity.ModulesConfigurationSection, Prism.Wpf" />
  </configSections>
  <startup>
  </startup>
  <modules>
    <module assemblyFile="ModuleA.dll" moduleType="ModuleA.ModuleAModule, ModuleA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" moduleName="ModuleAModule" startupLoaded="True" />
  </modules>
</configuration>

通过配置文件来配置ModuleCatalog就不需要添加ModuleA引用了

Directory

这个很尴尬,我调试一直不通过,辣鸡(●'◡'●)

LoadManual

Bootstrapper.cs中重写ConfigureModuleCatalog

        protected override void ConfigureModuleCatalog()
        {
            var moduleAType = typeof(ModuleAModule);
            ModuleCatalog.AddModule(new ModuleInfo()
            {
                ModuleName = moduleAType.Name,
                ModuleType = moduleAType.AssemblyQualifiedName,
                InitializationMode = InitializationMode.OnDemand
            });
        }
目录
相关文章
|
8月前
|
C#
WPF技术之Window.Resources
Window.Resources是在WPF中用于声明和定义资源的机制。通过将资源放置在Window.Resources中,我们可以在窗口内的任何位置引用这些资源,从而实现资源的共享和重用。
357 0
|
9月前
|
设计模式 前端开发 测试技术
WPF开发之Prism详解【内附源码】
WPF开发之Prism详解【内附源码】
209 0
|
Shell C# 调度
WPF PRISM开发入门一( 初始化PRISM WPF程序)
原文:WPF PRISM开发入门一( 初始化PRISM WPF程序) 这篇博客将介绍在WPF项目中引入PRISM框架进行开发的一些基础知识。目前最新的PRISM的版本是Prism 6.1.0,可以在Github上获取PRISM的源码。
3611 0
|
前端开发 C# 图形学
从PRISM开始学WPF(三)Prism-Region?
原文:从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Module? 从PRISM开始学WPF(五...
2748 0
SAP UI5 jQuery.sap.getModulePath 的工作原理
SAP UI5 jQuery.sap.getModulePath 的工作原理
SAP UI5 jQuery.sap.getModulePath 的工作原理
|
C#
WPF Interaction框架简介(一)——Behavior
原文:WPF Interaction框架简介(一)——Behavior 在WPF 4.0中,引入了一个比较实用的库——Interactions,这个库主要是通过附加属性来对UI控件注入一些新的功能,除了内置了一系列比较好用的功能外,还提供了比较良好的扩展接口。
2111 0
|
C#
WPF支持OneWay,TwoWay,OneTime,Default和OneWayToSource
原文:WPF支持OneWay,TwoWay,OneTime,Default和OneWayToSource 无论是目标属性还是源属性,只要发生了更改,TwoWay 就会更新目标属性或源属性。
1432 0
|
前端开发 Shell C#
从PRISM开始学WPF(二)Prism?
原文:从PRISM开始学WPF(二)Prism? 目录: 从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Module? 从PRISM开始学WPF(五)M...
1573 0
|
前端开发 C#
从PRISM开始学WPF(六)MVVM(二)Command?
原文:从PRISM开始学WPF(六)MVVM(二)Command? 从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Module? 从PRISM开始学WPF...
1214 0