模块概述谈到模块大家应该都不会感到陌生,不管是前端还是后端都有模块的概念,XAF中的模块概念与大多数框架中的模块概念是相通的 。XAF模块首先是一个.NET类库,同时它还包含一个继承自ModuleBase的Module类,Module类主要用于收集及对外暴露模块中的一些资源(BusinessObject、Controller、Action、Model、PropertyEditort等),同时XAF模块间的依赖与.NET类库间的依赖也是一致的,比如:A模块依赖B模块,B模块依赖C模块,那A模块同时拥有了B模块与C模块所提供的资源 。XAF模块涵盖的功能很多,当前只对模块的部分功能进行介绍,后续还会与其它的概念一起介绍 。
XAF默认提供了大量的基础功能模块(审计、图表、仪表盘、验证、报表、状态机等),你可以根据需要将这些模块添加到你的项目中 。项目结构XAF项目主要包含应用程序项目与模块项目,当然也可以包含普通的.NET项目 。应用程序项目是负责项目的启动,所以它需要指定平台(WinForm与Blazor),模块项目在不依赖特定平台时,是可以被其它应用程序项目或其它模块项目引用,依赖特定平台后,只能被特定平台的项目引用 。
在XAF22.1之前的版本中,XAF项目中包含两种模块项目类型,一种是与平台相关的,一种是不相关的,在之后的版本中,将平台相关的模块代码移到了应用程序项目中,目的是为了简化项目结构 。如果你想创建独立的模块,并且模块中包含了不同平台的代码,你还是需要创建平台相关的模块项目 。模块注册模块注册分为两种,一种是模块间依赖的注册,一种是将模块注册到应用程序项目中,这两种注册方式是不一样的 。
在整个XAF项目启动过程中模块是最先被初始化的,这里要引出一个概念Application(在不同的平台会有不同的实现,它们都是XafApplication的子类),从名字你就可以看出它在XAF中的地位,它上面挂载了运行XAF所需的所有资源,XAF模块当然也在其中,同时它还提供了丰富的功能,在WinForm项目中Application是以单例形式存在的,在Blazor项目中每一个会话都会有一个Application实例,现在你可以简单将Application理解为整个XAF应用的中心,后面会对它进行单独的介绍 。模块注册到应用程序项目中在XAF22.1后,将模块注册到应用程序项目中WinForm与Blazor采用了相同的配置方式,下面以WinForm为例
文章插图
上面的代码是ApplicationBuilder类中的片段,在XAF22.1后,WinForm项目都会存在一个ApplicationBuilder类,它是用于构建Application实例 。接触过XAF的小伙伴对上面的代码应该比较容易理解,这里简单的解读一下,builder是IXafApplicationBuilder<TBuilder>的一个实例,在不同的平台(WinForm与Blazor)会有不同的实现 。
builder.Modules是专门用于将模块注册到应用程序项目中的,它上有一个Add方法可以方便对模块进行注册,当然你也可以基于Add方法再作进一步的封装,例如:AddConditionalAppearance(ConditionalAppearance模块的注册方法),注册模块的先后顺序并不影响模块的加载 。
在之前的XAF版本中,将模块注册到应用程序项目中,都是将模块中Module类的实例添加到Application.Modules中,新的注册方式可读性更强,目的是相同的,但将模块添加到Application.Modules中是在builder.Build()时执行的 。builder实例中包含一个_buildSteps委托集合,调用builder上的方法也就是向_buildSteps集合中添加委托(Action<XafApplication>),委托有一个Application参数,借用此参数可以对Application进行配置,最后的builder.Build()是将_buildSteps集合中的委托遍历并执行,并返回Application的一个实例 。下面是Build方法简化后的代码
经验总结扩展阅读
- 魔方入门如何玩(魔方新手入门万能公式)
- 麻将怎么玩(麻将怎么玩新手入门)
- 国际象棋怎么玩新手入门(国际象棋里面的王后怎么走)
- 国际象棋怎么玩新手入门口诀(象棋心算口诀)
- 国际象棋怎么玩,新手入门(国际象棋新手入门必看)
- 跳棋怎么玩(跳棋怎么玩新手入门)
- 跳跳棋怎么玩(跳棋怎么玩新手入门)
- Module加载的详细说明-保证你有所收获
- JS 模块化-05 ES Module & 4 大规范总结
- 马里奥赛车8新手入门攻略?