框架增强
框架增强注入
midway 默认使用 injection 这个包来做依赖注入,虽然 @inject
装饰器能满足大多数业务的需求,但是对于框架来说,还有需要扩展和使用的地方,比如插件,配置等等。
框架默认注入
在默认情况下,框架会注入一些属性,方便开发,这些属性都能通过 @inject
装饰器来注入。
@inject()
appDir; // 当前项目的根目录
@inject()
baseDir; // 当前项目基础目录 src 或者 dist,绝对路径
@inject()
ctx; // 请求作用域,koa ctx
@inject()
logger; // 请求作用域,ContextLogger
注入插件
midway 除了支持 eggjs 原本的 app.xx 的插件用法,为了和框架解耦,同时,也可以通过 @plugin
装饰器来注入插件。
我们以 egg-jwt
插件为例,这个插件提供了 app.jwt
对象,而 @plugin
装饰器,则是类似于直接从 app 对象上拿属性。
比如 @plugin('jwt')
,其实就是 app['jwt']
,这样的写法,就可以和 app 对象进行解耦。
import { provide, plugin } from 'midway';
@provide()
export class BaseService {
@plugin()
jwt;
}
注入配置
在 midway 中不同环境的 config 都会挂载到 app.config 中,但是不是所有的业务逻辑都会依赖 app 对象,所以我们构造了 @config
装饰器来获取配置对象。
假如 config.default.ts
中有一些代码。
export const hello = 1;