本文是ABP核心项目源码分析的最后一篇,介绍一些前面遗漏的功能html
AbpSessionweb
AbpSession: 目前这个和CLR的Session没有什么直接的联系。固然能够自定义的去实现IAbpSession使之与CLR的Session关联app
IAbpSession:定义以下图中的四个属性。dom
NullAbpSession:IAbpSession的一个缺省实现,给每一个属性都给予null值,无实际做用源码分析
ClaimsAbpSession:实现了从ClaimsPrincipal/ClaimsIdentity中获取相应的claims,来完成IAbpSession中定义的属性的赋值。若是咱们没有将自定义的IAbpSession实现register到ABP容器中的话,ABPkernelmodule会把ClaimsAbpSession注入到容器中。spa
Text3d
该模块就一个功能:实现string.format的反操做。好比一个字符串"My name is Neo." 和一个格式化器"My name is {name}."。 该模块经过FormattedStringValueExtracter的Extract方法能够将Neo提取出来。orm
核心的逻辑在两个方法中:htm
第一个,FormatStringTokenizer的Tokenize方法,这个方法将格式化器转换为一个List<FormatStringToken> 。以"My name is {name}."为例就是转化为{(Text="My name is",Type="ConstantText"),(Text="name",Type="DynamicValue")}blog
第二个,FormattedStringValueExtracter的Extract方法,使用上面获得的List<FormatStringToken>去匹配str,而后将结果存到ExtractResult中
Reflection
IAssemblyFinder: 定义一个接口返回全部的assemblies
CurrentDomainAssemblyFinder, 返回当前appdomain中的assemblies
WebAssemblyFinder:返回web应用程序的bin目录下的assemblies
ITypeFinder/TypeFinder:从全部的assemblies中找出须要的type
ReflectionHelper:封装了三个方法