初期的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
这里需要手写成字符串,这对于后期维护会带来很大的麻烦。