初期的ABP版本分析

graph LR
abp--> A(castle windsor)
A--> IWindsorInstaller 
A--> IInterceptor拦截器
abp--> B(AbpBootstrapper)
B--> C(WindsorControllerFactory)
B--> 实例化WindsorContainer
B--> 接管Controller
B--> D(注册组件)
D--> IController
D--> ApiController
D--> NhQuestionRepository
D--> QuestionService
D--> NullLocalizationManager
C--> 接管Controller,从Windsor中获取Controller
abp--> ILocalizationManager

WindsorContainer.Install(FromAssembly.This())会注册所有实现IWindsorInstaller接口的组件

作者当时考虑到各模块的引用关系,特意列出来一个文档进行说明:

Dll dependencies

Framework
=======================================
- "Abp.Core" (no dependencies)
- "Abp.Data" (Dependencies: "Abp.Core")
- "Abp.Web" (Dependencies: "Abp.Core")

Core module
=======================================
- "Abp.Modules.Core" (Dependencies: "Abp.Core")
- "Abp.Modules.Core.Data" (Dependencies: "Abp.Core", "Abp.Data", "Abp.Modules.Core")
- "Abp.Modules.Core.Web" (Dependencies: "Abp.Core", "Abp.Data", "Abp.Web", "Abp.Modules.Core", "Abp.Modules.Core.Data")

Taskever application module
=======================================
- "Taskever.Core" (Dependencies: "Abp.Core", "Abp.Modules.Core")
- "Taskever.Data" (Dependencies: "Abp.Core", "Abp.Data", "Abp.Modules.Core", "Abp.Modules.Core.Data", "Taskever.Core")
- "Taskever.WebSpa" (Dependencies: "Abp.Core", "Abp.Data", "Abp.Web", "Abp.Modules.Core", "Abp.Modules.Core.Data", "Abp.Modules.Core.Web", "Taskever.Core", "Taskever.Data")

我猜测作者应该是由此产生的AbpMoudle的设计,作者也是在不断的重构、思考、反复修改,在这个过程中找寻最好最方便使用的设计。2c724a6a8f58968a210be64d9040c3b828968d06

后面的一次提交显示Developing module system

作者非常善于思考 日志中是这样描述的:

!!! Think how to achive module dependencies???

他这时发现abpmooule的设计已经不能满足他的需求,于是他开始思考如何更好的设计模块依赖。Dependencies这里需要手写成字符串,这对于后期维护会带来很大的麻烦。