Injection is a powerful inversion of control container that is widely used in the midway framework and brings good user experience.
Injection is a powerful inversion of control container that is widely used in the midway framework and brings good user experience.
$ npm install injection reflect-metadata --save
Node.js >= 10.0.0 required.
Injection requires TypeScript >= 2.0 and the experimentalDecorators, emitDecoratorMetadata, types and lib compilation options in your tsconfig.json file.
{ "compilerOptions": { "target": "ES2018", "module": "commonjs", "moduleResolution": "node", "experimentalDecorators": true, "emitDecoratorMetadata": true, "inlineSourceMap":true, "noImplicitThis": true, "noUnusedLocals": true, "stripInternal": true, "pretty": true, "declaration": true, "outDir": "dist", "lib": ["ES2018", "dom"] } }
import {Container, provide, inject} from 'injection';@provide('userModel') class UserModel {
}
@provide('userService') class UserService {
@inject() private userModel;
async getUser(uid) { // TODO return 'Alex'; } }
const container = new Container(); container.bind(UserService); container.bind(UserModel);
async function getData() { const userService = await container.getAsync('userService'); const data = await userService.getUser(123); return data; }
getData().then(console.log); // Alex
Document: https://midwayjs.org/injection/guide.html