WPF Prism框架(模块化)

1. 前言

  模块化开发是程序开发的一种方式,他将程序分为一组松散耦合的功能单元(命名模块),可集成到更大的应用程序中。模块封装了应用程序整体功能的一部分,通常代表一组相关功能。它可以包括一系列相关组件,如应用程序功能(包括用户界面和业务逻辑)或应用程序基础架构(如用于记录或验证用户的应用程序级服务)。模块是相互独立的,但可以松散地相互通信。使用模块化应用程序设计,您可以更轻松地开发、测试、部署和维护应用程序。

  例如,考虑个人银行申请。用户可以访问各种功能,例如在帐户之间转账、支付账单和从单个用户界面 (UI) 更新个人信息。但是在后台,这些功能都封装在一个离散模块中。这些模块相互通信,并与后端系统(如数据库服务器和 Web 服务)进行通信。应用程序服务集成每个不同模块中的不同组件,并处理与用户的通信。用户看到一个类似于单个应用程序的集成视图。

1.1 构建模块化应用的好处

  您可能已经在使用组件、接口和类构建精心设计的应用程序,并采用良好的面向对象设计原则。即便如此,除非非常小心,否则您的应用设计可能仍然是"单一的"(在应用程序内,所有功能都以紧密耦合的方式实现),这会使应用程序难以开发、测试、扩展和维护。

  另一方面,模块化应用方法可以帮助您识别应用程序的大型功能区域,并允许您独立开发和测试该功能。这可以使开发和测试更加容易,但也可以使您的应用程序更加灵活,并且更容易在未来扩展。模块化方法的好处是,它可以使您的整体应用架构更加灵活和可维护,因为它允许您将应用程序分解为可管理的部件。每一件都封装了特定的功能,并且每一件都通过清晰但松散耦合的通信通道进行集成。

1.2 Prism对模块化应用开发的支持

  Prism为模块化应用程序开发和应用程序内的运行时间模块管理提供支持。使用 Prism 的模块化开发功能可以节省您的时间,因为您不必实现和测试自己的模块化框架。Prism支持以下模块化应用程序开发功能:

  1. 用于注册命名模块和每个模块位置的模块目录;您可以通过以下方式创建模块目录
  2. 通过在代码或可扩展的应用程序标记语言 (XAML) 中定义模块
  3. 通过在目录中发现模块,您可以加载所有模块,而无需在集中目录中明确定义
  4. 通过在配置文件中定义模块
  5. 模块支持初始化模式和依赖性的声明性元数据属性
  6. 对于模块加载:

    • 依赖性管理,包括重复和循环检测,以确保模块按正确顺序加载,并且仅加载和初始化一次

    • 按需和背景下载模块,以尽量减少应用程序启动时间;其余模块可以在后台或需要时加载和初始化

  7. 与依赖性注射容器集成,以支持模块之间的松散耦合 

1.3 核心概念,模块化应用的构建基块

  本节介绍了与Prism模块化相关的核心概念,包括接口、模块加载过程、模块目录、模块之间的通信和依赖性注入容器。

2. 模块化的方式

      模块化到IModule接口

2.1 dll直接引用

首先根据Prism(MVVM)中介绍的方法,引入Prism框架

然后创建图示三个项目,分别引入Prism框架,创建相应的文件夹

 这种方法要实现模块化,ConfigureModuleCatalog配合Profile(IModule),在ModuleWpf项目中把依赖的两个模块ModuleA与ModuleB管理起来

在MouleWpf中的App.xaml.cs中重写ConfigureModuleCatalog方法

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

 要调用PageA与PageB要将它们注册,只有注册过的界面才能被使用

注册的类要继承IModule接口,此类不写在ModuleWpf项目中

 public class ModuleBProfile : IModule
    {
        public void OnInitialized(IContainerProvider containerProvider)
        {

        }

        public void RegisterTypes(IContainerRegistry containerRegistry)
        {
            containerRegistry.RegisterForNavigation<PageB, ModuleBProfile>();
        }
    }

最重要的是要将这两个项目在ModuleWpf中引用

 2.2 指定路径

ModuleWpf项目完全不依赖ModuleA与ModuleB,完全解耦

在MouleWpf中的App.xaml.cs中重写CreateModuleCatalog方法

给依赖模块设置一个查找路径 

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

注意将模块dll文件放进该路径下

2.3  通过配置文件

通过配置文件要修改ModuleWpf下的App.config

先创建一个自定义节点,使用configSections标签(注意:每个配置文件只允许存在一个configSections标签,如果存在该元素标签,ta还必须是根元素(configuration)下的第一个子元素)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<configSections>
		<section name="modules" type="Prism.Modularity.ModulesConfigurationSection, Prism.Wpf"/>
	</configSections>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
	<modules>
		<module assemblyFile="ModuleA.dll" moduleType="ModuleA.ModuleAProfile, ModuleA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" moduleName="ModuleAProfile" startupLoaded="True"/>
		<mosule assemblyFile="ModuleB.dll" moduleType="ModuleB.ModuleBProfile, ModuleB Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" moduleName="ModuleBProfile" startupLoaded="True"/>
	</modules>
</configuration>

在MouleWpf中的App.xaml.cs中重写CreateModuleCatalog方法

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

注意返回的值,与2.2不同

要实现功能要把dll放在debug目录下

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: WPF Prism框架是一个面向对象的框架,用于开发模块化、可扩展的WPF应用程序,它基于MVVM设计模式和依赖注入技术。该框架的主要目的是能够轻松地实现可插拔的模块,公共的服务、组件和工具类的共享,同时也提供了灵活的路由、事件聚合、模块加载、导航和命令处理等机制。使用WPF Prism框架可以快速地开发出灵活的WPF应用程序,从而提高代码质量和开发效率,减少代码的维护难度。 WPF Prism框架具有以下的特点: 1. 扩展性:可以轻松地添加新的模块、服务和组件,同时也可以快速替换现有的组件。 2. 可重用性:提供了丰富的公共组件、服务和工具类,从而可以提高代码的可重用性。 3. 灵活性:提供了灵活的路由、事件聚合、模块加载和导航等机制,能够更好地满足应用程序的需求。 4. 易用性:提供了一套完整的MVVM设计模式和依赖注入技术的实践方案,从而能够更好地组织应用程序的逻辑。 总之,WPF Prism框架是一个强大的工具,能够让我们更好地开发WPF应用程序,提高代码质量和开发效率,实现可插拔的模块化和可扩展性,同时也具有灵活性和易用性。 ### 回答2: WPF Prism框架是一种面向MVVM模式的开源框架,它帮助开发人员使用模块化的方式构建可扩展、可重用和易于维护的WPF应用程序。该框架主要由Microsoft和模式仲裁者团队开发和维护,它借鉴了许多现代的软件开发理念,比如IoC容器、依赖注入和事件聚合器等。 WPF Prism框架的核心思想是将应用程序分解为许多可独立维护和扩展的模块。这些模块可以基于业务逻辑、UI、数据或任何其他特征进行分组。在该框架中,模块由各种名为“组件”的构建块组成。这些组件包括视图(View)、视图模型(ViewModel)、服务(Service)、模型(Model)等。通过基于这些组件的开发,可以实现具有高度可伸缩性和可重用性的应用程序。 为了实现这种模块化开发和组件化架构,WPF Prism框架提供了一些重要的工具和特性。例如,在该框架中可以使用依赖注入容器(如Unity)来管理组件及其依赖关系。此外,该框架还提供了一些基于事件的消息机制,可方便地实现模块间的交互和通信。 总体来说,WPF Prism框架是一种利用开源技术实现企业级应用程序开发的最佳选择。它具有良好的模块化、组件化和可扩展性特性,可以在实现复杂WPF应用程序时提高开发效率和代码质量。 ### 回答3: WPF Prism是一个基于WPF框架,它为大型应用程序提供了一种组织、设计和部署的方式。它旨在帮助开发者构建可扩展、可维护和可测试的WPF应用程序。 WPF Prism采用了面向模块的编程思想,它将整个应用程序划分为多个模块,每个模块都包含自己的逻辑和用户界面。这种模块化设计使得应用程序易于扩展和维护,同时也简化了开发流程。 WPF Prism同时提供了一组强大的工具和功能,如依赖注入、命令模式和事件聚合等,这些功能让WPF应用程序更加易于开发和测试。它还提供了一个强大的导航和区域管理系统,开发者可以使用这些系统来管理不同部分的用户界面和功能。 总之,WPF Prism是一个优秀的框架,它为开发者提供了全面的工具和功能,使得构建WPF应用程序变得更加容易和高效。它的结构良好、可扩展性强,而且可以充分利用WPF的强大功能。无论是大型企业应用程序还是小型桌面应用程序,WPF Prism都是一个理想的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉玊则不达

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值