项目中引入 InversifyJS
安装
可以通过 npm
或者 yarn
来引入 InversifyJS
:
1yarn add inversify reflect-metadata
InversifyJS 类型定义包含在 inversify npm 包中。InversifyJS 需要 experimentalDecorators、 emitDecoratorMetadata 和 lib 编译选项开启在 tsconfig.json 文件中。
1{
2 "compilerOptions": {
3 "experimentalDecorators": true,
4 "emitDecoratorMetadata": true
5 }
6}
InversifyJS 需要一个支持下面特性的现代 JavaScript 引擎:
- Reflect metadata
- Promise (仅在使用 provider injection 时需要)
- Proxy (仅在使用 activation handlers 时需要)
如果你的环境不支持其中的特性,那么需要引入 shim 或者 polyfill。
环境支持和 polyfills
InversifyJS 需要一个现代的 JavaScript 引擎,需要支持 Promise、 Map、 Metadata Reflection API 和 Proxy 对象。 如果你的环境不支持这些的化,就需要引入 shim 或者 polyfill。
Metadata Reflection API
reflect-metadata polyfill 仅在进入应用时需要引入一次,因为反射对象是一个全局单例。更多详情参见这里。
始终需要。使用 reflect-metadata 作为 polyfill。
1yarn install reflect-metadata
reflect-metadata
的类型定义已在 npm
包中被包含。你需要添加如下引用到 tsconfig.json
中的类型字段:
1{
2 "compilerOptions": {
3 "types": ["reflect-metadata"]
4 }
5}
最后,引入 reflect-metadata
。如果你使用:
1import "reflect-metadata";
如果你在使用网页浏览器那么可以使用 script 标签:
1<script src="./node_modules/reflect-metadata/Reflect.js"></script>
这将创建全局反射对象。
Map
Map 在使用 InversifyJS 3 或者更高版本时需要。
大多数现代 JavaScript 引擎支持 map,但如果你需要支持旧浏览器,那么需要使用 map polyfill (比如 es6-map)。
Promise
Promise 仅在使用 注入提供者 时需要。
多数现代 JavaScript 引擎支持 promise,但如果你需要支持就浏览器,那么需要使用 promise polyfill (比如 es6-promise 或者 bluebird)。