netcore 发展到现在已经到了 3.0 版本,而 abp 作为典型的 ddd框架模板,也已经在诸多项目中得到实践。
说来惭愧,在.net 平台有做了差不多三年了,这两个好东西一个都没有好好学习理解过。
正好前段时间决心学习 abp,对 abp 的模块概念有了了解,而最近一个偶然机会,使用 netcore 做个简单的项目,意外的发现abp和netcore 的模块设计思想是极其的相似!
全局依赖注入
abp 和 core 都使用了一个全局依赖注入的方式,所有的模块通过容器进行注册,然后在程序中的不同地方随时使用注册了的服务。使用 依赖注入的好处显而易见,避免了在代码中写死代码,大大的减少了代码的耦合程度,便于调整和维护。
1.在 abp 中注册模块服务的做法是,在模块自己实现 abpmodule,启动程序在启动时去遍历依赖模块中实现了 abpmodule 的类,然后调用初始化流程(abp中初始化详细流程请移步 abp相关文档)。初始化的过程就是将模块定义的功能服务注册到容器中,那么主程序或者其它调用的模块使用模块的服务时,就可以通过注入的方式自动从容器中获取到服务对象。
2.而在netcore 的模块注册方式是在 ConfigureService 方法(相当于启动方法)通过调用 app.AddXXXX() 来注册模块,这个 AddXXX 实际上是一个扩展方法,模块自身实现一个模块初始化的扩展方法,在启动方法调用时会传入容器对象,而后模块自己做自己模块的注册调用。
模块配置
使用模块化编程自然时要考虑模块适应不同的应用场景和情况,那自然是少不