Malagu 的应用是由 Malagu 组件组成,Malagu 组件中通过 @Component
装饰器可以把类对象注入到 IoC 容器里被托管,其实这样还是不够的,我们还需要在模块中注册一下,只有注册过的类才会把对象注入到容器中。换而言之,IoC 容器是由多个模块组成,Malagu 框架会将来做不同组件的模块组装成 IoC 容器。
模块定义
Malagu 框架底层使用的是 InversifyJS,所以 Malagu 的模块就是 InversifyJS 里面的容器模块,模块定义如下:
import { autoBind } from '@malagu/core'; // autoBind 将需要注入的对象注入到模块中,并返回该模块
import '.'; // 告诉 autoBind 把当前目录下的所有需要注入的类对象注入到模块
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
自定义额外加载模块规则:
**
# 前后端应用都会加载的模块
modules:
- lib/xxx-module
# 前端应用都会加载的模块
frontend:
modules:
- lib/xxx-module
# 后端应用都会加载的模块
backend:
modules:
- lib/xxx-module
# 根组件自定义模块配置,可以直接配置 ts 文件相对项目根目录的相对路径
modules:
- src/xxx-module