介绍

之前也研究过Prism框架但是一直没有深入理解,现在项目上想把一个Winform的桌面应用程序改造成WPF程序,同时我希望程序是可测试可维护架构良好的,Prism的这些设计理念正好符合我的需求,其主要用于WPF和Xamarin,用于构建松耦合,可维护,可测试的应用程序框架,在我看到源码后也深受启发,欢迎大家一起交流探讨。

开始

我将从官方的Samples的顺序,看介绍中的每个功能是怎么实现的。

0、PrismApplicationBase

首先介绍一下这个类,这是Startup,这个类中构建了所有的Prism功能和整体的框架。这个类中大多数的方法都是虚方法,可以重载加入自定义的一些功能,Prism也希望我们如此进行设计。

在整个Prism中,UnityContainer无处不再,它就是一个大的容器,保存着所有类,在需要的时候Resolver出来。

有两个字段,ContainerExtension就UnityContainer,当然也可以自定义其他的容器,在文章中都默认为UnityContainer容器,关于容器也给一个官方说明

ModuleCatalog是定义了加载Module的方式,模块是Prism的一大优势,给一张官方说明,意图胜千言

所有的一切都是从一个类开始PrismApplicationBase,在这个类中加载了Prism的所有功能。

看一下最重要的一个方法,正是在这个方法中完成了大部分功能,其主要工作就是将基础架构模块,RequireTypes,RegionAdapterMappings,RegionBehaviors,注入到相应的容器中。

下面几个方法感受一下

在PrismApplicationBase的子类中看一下

正如我前面所说,重写某个方法,先调用Base.Method,然后再加入自己功能

对于开发者来说必须重写的就两个方法

创建主窗体和RegisterTypes方法,在第二个方法里可以加入我们所必须的一些基础构建,ContainerRegistry其实就是注册的Unity容器

1、BootstrapperShell

看着就是创建了一个Bootstraper然后Run了一下,通过容器创建了主窗体,Show了一下。

看一下如何实现的,其实文章都是在Bootstrapper中

看到这两个类是不是有一种恍然大悟的感觉,原来Bootstrapper是啥?就是将PrismApplicationBase中的方法全部从Application中抽出来,在这重新实现了一下,难道这就是单一职责原则?

来看一下Run,这些方法太熟悉了吧。

日志怎么用,当然是创建然后记录了,所有的信息都放到资源里,创建的方式有很多种,选择最简单的一种new,

2、Regions

这个就是简单的创建一个Region

一目了然啊,就是在ContentControl中用RegionManager的依赖属性创建的一个Region。

用经典的三个问题来看看RegionManager,你是谁,你从哪里来,要到哪里去。

哦!小伙子你很张狂啊,很强大。看一眼把关了就可以了。

看一眼知道了有一个RegionName依赖属性,当这个属性变化的时候调用

IsInDesignMode就是判断是否在VS的设计模式,调用

哦,还是用了延迟加载,还是用容器创建的,Prism里几乎所有的类都是通过容器创建的

Behavior?WPF里面的行为就是服务啊,就是先把一个依赖属性存着,需要的时候盘它。去看看

很标准的服务。

使用了弱引用,很棒的设计,想想也是如此,

通过Load事件实现延迟加载,嗯,很棒,在界面载入的时候创建Region。

载入触发一次就好。很喜欢这个单词WireUp,缠绕,UnWire,

通过名字创建,到RegionAdapterMapping中找到RegionAdapter然后通过Adapter的Initialize创建。

RegionAdapterMapping就是RegionAdapter的集合

先创建Region,然后添加行为

都有哪些行为呢?

创建Region工作完成啦。

看看官方文档关于Region

3、CustomRegions

想要自定义一个Regin,那肯定要创建一个RegionAdapter,自定义一个StackPanelRegionAdapter

通过刚刚的源码解读这些理解起来好像都不困难了。

总结

通过源码探索了下Bootstapper,Region的创建及如何自定义一个RegionAdapter,轻轻揭开了Prism一点点面纱。后面还有很多的功能和想法,欢迎大家和我一起探讨学习。

文章来源: www.cnblogs.com,作者:杜金锋,版权归原作者所有,如需转载,请联系作者。

原文链接:https://www.cnblogs.com/lovexinyi/p/12593960.html

prism项目搭建 wpf_Prism 源码解读1-Bootstrapper和Region的创建相关推荐

  1. prism项目搭建 wpf_Prism完成的一个WPF项目

    本着每天记录一点成长一点的原则,打算将目前完成的一个WPF项目相关的技术分享出来,供团队学习与总结. 总共分三个部分: 基础篇主要针对C#初学者,巩固C#常用知识点: 中级篇主要针对WPF布局与Mat ...

  2. Requests源码解读

    Requests源码解读01-README文件&api模块&session模块 Requests是什么? 为什么要用Requests 源码分析 README文件 api.py get方 ...

  3. APS入门3-C#开发-从源码解读一个APS项目

    APS系列入门 APS入门1-综述 APS入门2-ortools APS入门3-从源码解读一个C# APS项目 APS入门4: 供应链与APS APS入门5:工厂管理 APS入门6-LEKIN学习与复 ...

  4. Feflow 源码解读

    Feflow 源码解读 Feflow(Front-end flow)是腾讯IVWEB团队的前端工程化解决方案,致力于改善多类型项目的开发流程中的规范和非业务相关的问题,可以让开发者将绝大部分精力集中在 ...

  5. html 源码知识,源码解读

    用Node.js写一个web服务器,我前面已经写过两篇文章了: 第一篇是不使用任何框架也能搭建一个web服务器,主要是熟悉Node.js原生API的使用:使用Node.js原生API写一个web服务器 ...

  6. 涨薪秘籍之源码篇:Spring全家桶源码解读,大师晋级笔记

    最近很多人留言说今年找工作太难了,要涨薪几乎更难了 !真的就这么悲观吗?其实不然,我们企业一直都在大量的招人,一直都没停过.只是一点和之前不一样要求变高了,优秀的人一直都缺. 我身边朋友所在的大厂也一 ...

  7. 约2万字-Vue源码解读汇总篇(续更)

    约2万字-Vue源码解读汇总篇(续更) 一.前言 1.系列汇总 未完待续... Vue源码解读:06Vue3探索篇 Vue源码解读:05生命周期篇 Vue源码解读:04模板编译篇 Vue源码解读:03 ...

  8. xxl-sso源码解读(基于Cookie)

    xxl-sso源码解读 文章目录 xxl-sso源码解读 前言 一.XXL-SSO是什么? 二.搭建步骤 三.系统简述 1.xxl-sso-server 2.xxl-sso-core 3. xxl-s ...

  9. Alamofire源码解读系列(九)之响应封装(Response)

    本篇主要带来Alamofire中Response的解读 前言 在每篇文章的前言部分,我都会把我认为的本篇最重要的内容提前讲一下.我更想同大家分享这些顶级框架在设计和编码层次究竟有哪些过人的地方?当然, ...

最新文章

  1. 做好自己,一切都是最好的安排
  2. scikit-learn - 分类模型的评估 (classification_report)
  3. java 多线程 事件_java 多线程-线程不安全案例
  4. JavaScript Object对象
  5. 关于Android的EditText焦点问题
  6. PyQt4基本布局常用方法之addSpacing
  7. 使用TFS+GIT实现分布式项目管理
  8. Redis基础1(定义及基础)
  9. 盐城工学院计算机基础试卷,大学计算机基础及实用软件/大学计算机基础
  10. 收购Nervana,英特尔缘何看中AI市场
  11. 史无前例,阿里云或将空降 M7 级高管
  12. c语言switch结构计算利润,求助。。关于用switch编写简易计算器
  13. hbase插入数据语句_记一次 spark thriftserver 插入数据到hbase 的异常
  14. VScode配置go空格缩进替代tab
  15. 测试手机是否可以安装MRP软件和MRP游戏
  16. 计算机应用数学,计算机应用数学.PDF
  17. win7电脑误删鼠标键盘驱动_重装win7系统后鼠标键盘无法使用解决方法
  18. java答题软件_非常实用的java自动答题计时计分器
  19. 深信服AC路由部署模式,怎么启用为PN与总部机构为PN连接
  20. 迅雷链基于智能硬件的DPoA共识机制介绍

热门文章

  1. 关于未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值的解决方法...
  2. python测试报告
  3. eclipse启动不起来,eclipse.ini配置问题(支持大内存64bit问题)
  4. ROC曲线(Receiver Operating Characteristic Curve)
  5. WCF读取配置动态生成客户端对象
  6. 《Qt Quick 4小时入门》学习笔记4
  7. this.get_element .style为空或不是对象
  8. HM 内存池设计(2) HM6.0内存池设计
  9. ASP.NET锚标记使用2种小方法
  10. 实现跨域访问---同源策略 、常见跨域方法