Malagu 的应用是由 Malagu 组件组成,Malagu 组件中通过 @Component 装饰器可以把类对象注入到 IoC 容器里被托管,其实这样还是不够的,我们还需要在模块中注册一下,只有注册过的类才会把对象注入到容器中。换而言之,IoC 容器是由多个模块组成,Malagu 框架会将来做不同组件的模块组装成 IoC 容器。

模块定义

Malagu 框架底层使用的是 InversifyJS,所以 Malagu 的模块就是 InversifyJS 里面的容器模块,模块定义如下:

  1. import { autoBind } from '@malagu/core'; // autoBind 将需要注入的对象注入到模块中,并返回该模块
  2. import '.'; // 告诉 autoBind 把当前目录下的所有需要注入的类对象注入到模块
  3. export default autoBind(); // 如果需要 Malagu CLI 自动加载模块,请把模块对象导出为默认

模块作用

模块最主要的作用是注入对象的隔离和分类管理。Malagu 组件可能有多个模块,如前端模块、后端模块和通用模块,也可以是任意场景下的模块。模块可以手动加载,也可以由 Malagu CLI 自动加载。前端模块会聚合到一起形成前端 IoC 容器,后端模块会聚合到一起形成后端 IoC 容器,前后端之间的模块是隔离的,不会混在一起。

模块加载

大部分情况,模块是由 Malagu CLI 来加载,Malagu CLI 有默认加载规则。

前端模块默认加载规则:

  • <组件根>/lib/frontend-module.js
  • <组件根>/lib/module.js
  • <组件根>/lib/browser/frontend-module.js
  • <组件根>/lib/browser/module.js

后端模块默认加载规则:

  • <组件根>/lib/backend-module.js
  • <组件根>/lib/module.js
  • <组件根>/lib/node/module.js
  • <组件根>/lib/node/backend-module.js

根组件前端模块默认加载规则:
**

  • <组件根>/src/frontend-module.ts
  • <组件根>/src/module.ts
  • <组件根>/src/browser/module.ts
  • <组件根>/src/browser/frontend-module.ts

根组件后端模块默认加载规则:
**

  • <组件根>/src/backend-module.ts
  • <组件根>/src/module.ts
  • <组件根>/src/node/module.ts
  • <组件根>/src/node/backend-module.ts

自定义额外加载模块规则:
**

  1. # 前后端应用都会加载的模块
  2. modules:
  3. - lib/xxx-module
  4. # 前端应用都会加载的模块
  5. frontend:
  6. modules:
  7. - lib/xxx-module
  8. # 后端应用都会加载的模块
  9. backend:
  10. modules:
  11. - lib/xxx-module
  12. # 根组件自定义模块配置,可以直接配置 ts 文件相对项目根目录的相对路径
  13. modules:
  14. - src/xxx-module