Fork me on GitHub

03 2016 档案

摘要:以下图中描述的接口和类都在Abp项目的Runtime/Validation, UI/Inputs目录下的。在当前版本的ABP(0.83)中这些接口和类并没有实际使用到。阅读代码时可以忽略,无需浪费时间去寻找其是如何被ABP使用的(本文的目的)。 这些接口和类最终都是通过IInputType被Feat 阅读全文
posted @ 2016-03-31 19:17 ZHK的博客 阅读(1865) 评论(0) 推荐(2)
摘要:对传给Application service对象中的方法的DTO参数,ABP都会在方法真正执行前自动完成validation(根据标注到DTO对象中的validate规则)。 ABP是如何做到的? 思路无外乎通过Castle的拦截器实现AOP。本文主要分析ABP是如何设计。 Ivalidate: 空 阅读全文
posted @ 2016-03-30 22:08 ZHK的博客 阅读(4193) 评论(2) 推荐(6)
摘要:IDTO:空接口,用于标注Dto对象。 ComboboxItemDto:用于combobox/list中Item的DTO NameValueDto<T>/NameValueDto:用于name value键值对的DTO, name为string类型, value为泛型或string类型。 Entit 阅读全文
posted @ 2016-03-29 22:05 ZHK的博客 阅读(7498) 评论(2) 推荐(5)
摘要:类名 扩展的类型 方法名 参数 作用 XmlNodeExtensions XmlNode GetAttributeValueOrNull attributeName Gets an attribute's value from an Xml node. JsonExtensions object T 阅读全文
posted @ 2016-03-28 22:08 ZHK的博客 阅读(3201) 评论(2) 推荐(6)
摘要:IEntity<TPrimaryKey>: 封装了PrimaryKey:Id,这是一个泛型类型 IEntity: 封装了PrimaryKey:Id,这是一个int类型 Entity<TPrimaryKey> :支持主键是泛型类型的Entity Entity:支持主键是int类型的Entity IHa 阅读全文
posted @ 2016-03-28 16:07 ZHK的博客 阅读(5748) 评论(3) 推荐(9)
摘要:ABP中有两种cache的实现方式:MemroyCache 和 RedisCache. 如下图,两者都继承至ICache接口(准确说是CacheBase抽象类)。ABP核心模块封装了MemroyCache 来实现ABP中的默认缓存功能。 Abp.RedisCache这个模块封装RedisCache来 阅读全文
posted @ 2016-03-28 12:18 ZHK的博客 阅读(5433) 评论(3) 推荐(6)
摘要:本文逐个分析ABP中涉及到locaization的接口和类,以及相互之间的关系。本地化主要涉及两个方面:一个是语言(Language)的管理,这部分相对简单。另一个是语言对应得本地化资源(Localization)的管理,这部分稍显复杂。 LanguageInfo:用于封装language的基本信息 阅读全文
posted @ 2016-03-25 20:07 ZHK的博客 阅读(4098) 评论(5) 推荐(11)
摘要:Timing这个简单实用的功能主要用于以统一的方式表示时间。因为ABP中有大量的module,还支持自定义module,所以将时间统一表示为local时间(默认)或utc时间是必要的。 IClockProvider:提供获取当前时间和标准化时间的接口。 UtcClockProvider:实现了以UT 阅读全文
posted @ 2016-03-24 20:22 ZHK的博客 阅读(2593) 评论(4) 推荐(10)
摘要:ABP以AOP的方式实现UnitOfWork功能。通过UnitOfWorkRegistrar将UnitOfWorkInterceptor在某个类被注册到IOCContainner的时候,一并添加到该类在容器中对应的ComponentModel的Interceptors集合中。总结一句话就是,UOW的 阅读全文
posted @ 2016-03-23 17:48 ZHK的博客 阅读(8935) 评论(19) 推荐(12)
摘要:文主要说明ABP中后台工作者模块(BackgroundWorker)的实现方式,和后台工作模块(BackgroundJob)。ABP通过BackgroundWorkerManager来管理BackgroundJobManager,然后通过BackgroundJobManager来管理Backgrou 阅读全文
posted @ 2016-03-22 19:10 ZHK的博客 阅读(8627) 评论(9) 推荐(16)
摘要:ABP使用Castle日志记录工具,并且可以使用不同的日志类库,比如:Log4Net, NLog, Serilog... 等等。对于所有的日志类库,Castle提供了一个通用的接口来实现,我们可以很方便的处理各种特殊的日志库,而且当业务需要的时候,很容易替换日志组件。 Logger功能模块涉及到的接 阅读全文
posted @ 2016-03-21 19:44 ZHK的博客 阅读(3945) 评论(5) 推荐(10)
摘要:本文主要说明Setting的实现以及Mail这个功能模块如何使用Setting. 首先区分一下ABP中的Setting和Configuration。 Setting一般用于需要通过外部配置文件(或数据库)设置的简单类型数据(一般就是字符串),比如SMTP HOST. Configuration一般只 阅读全文
posted @ 2016-03-20 21:12 ZHK的博客 阅读(7358) 评论(8) 推荐(15)
摘要:ABP的依赖注入的实现有一个本质两个途径:1.本质上是依赖于Castle这个老牌依赖注入的框架。2.一种实现途径是通过实现IConventionalDependencyRegistrar的实例定义注入的约定(规则),然后通过IocManager来读取这个规则完成依赖注入。3另一种实现途径是直接Ioc 阅读全文
posted @ 2016-03-19 20:30 ZHK的博客 阅读(8524) 评论(8) 推荐(8)
摘要:ABP在初始化阶段做了哪些操作,前面的四篇文章大致描述了一下。 为个更清楚的描述其脉络,做了张流程图以辅助说明。其中每一步都涉及很多细节,难以在一张图中全部表现出来。每一步的细节(会涉及到较多接口,类,调用关系,步骤流程什么的)会在后面的文章中通过其他图和文字详细描述。其实如果仔细分析Abp原代码的 阅读全文
posted @ 2016-03-18 16:37 ZHK的博客 阅读(5843) 评论(6) 推荐(26)
摘要:核心模块的配置 Configuration是ABP中设计比较巧妙的地方。其通过AbpStartupConfiguration,Castle的依赖注入,Dictionary对象和扩展方法很巧妙的实现了配置中心化。配置中心化是一个支持模块开发的框架必备功能。 ABP中核心功能模块中的一些功能的运行时的行 阅读全文
posted @ 2016-03-17 15:00 ZHK的博客 阅读(7430) 评论(6) 推荐(15)
摘要:Abp是一种基于模块化设计的思想构建的。开发人员可以将自定义的功能以模块(module)的形式集成到ABP中。具体的功能都可以设计成一个单独的Module。Abp底层框架提供便捷的方法集成每个Module.下图是所有Abp自带的module.AbpModule是所有Module的基类,其已经拥有了I 阅读全文
posted @ 2016-03-16 15:42 ZHK的博客 阅读(16218) 评论(4) 推荐(23)
摘要:一般来说,ASP.NET Web应用程序的第一个执行的方法是Global.asax下定义的Start方法。执行这个方法前HttpApplication 实例必须存在,也就是说其构造函数的执行必然是完成了。 ABP开始的地方就是HttpApplication的构造函数。 如下图一,Abp定义了一个继承 阅读全文
posted @ 2016-03-15 17:22 ZHK的博客 阅读(15660) 评论(11) 推荐(29)
摘要:下面代码(摘抄之别处,原创在哪不知)是采用TransparentProxy和RealProxy实现对象的动态代理。碍于其使用反射掉用方法,所以就小试着将反射改成Expression以提高执行的效率。第15行就是原来代码中反射掉用方法的关键代码。 其他的辅助类   将15行替换为如下Expressio 阅读全文
posted @ 2016-03-14 16:57 ZHK的博客 阅读(2010) 评论(0) 推荐(3)
摘要:短时间锁定的情况下,自旋锁(spinlock)更快。(因为自旋锁本质上不会让线程休眠,而是一直循环尝试对资源访问,直到可用。所以自旋锁线程被阻塞时,不进行线程上下文切换,而是空转等待。对于多核CPU而言,减少了切换线程上下文的开销,从而提高了性能。) 以下是简单实例(并行执行10000次,每次想li 阅读全文
posted @ 2016-03-12 19:04 ZHK的博客 阅读(2435) 评论(0) 推荐(2)
摘要:Lock是常用的同步锁,但是我们无法在Lock的内部实现异步调用,比如我们无法使用await. 以下面的代码为例,当你在lock内部使用await时,VS会报错提醒。 最简单的解决办法就是使用第三方的库Nito.AsyncEx。可以通过Nuget安装。 通过AsyncLock就可以在锁的内部实现异步 阅读全文
posted @ 2016-03-12 16:57 ZHK的博客 阅读(6924) 评论(1) 推荐(7)
摘要:ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序。 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module).其中13个依赖于Abp这个核心包。另外两个包(FluentMigration,Web.Resou 阅读全文
posted @ 2016-03-12 10:36 ZHK的博客 阅读(47856) 评论(27) 推荐(117)
摘要:关键代码第4,5行。 很简单的原理不解释:readonly + Lazy(.Net 4.0 + 的新特性) 测试结果: 阅读全文
posted @ 2016-03-09 11:17 ZHK的博客 阅读(3385) 评论(3) 推荐(1)