首页 > 其他 > 详细

inversify 强大&&轻量级的基于typescript 的ioc 框架

时间:2020-05-12 23:25:55      阅读:190      评论:0      收藏:0      [点我收藏+]

inversify 强大&&轻量级的基于typescript 的ioc 框架,以前有介绍过一个typedi 的类似框架
inversify github 的star比typedi 多很多

参考使用

  • 配置tsconfig.json
 
{
    "compilerOptions": {
        "target": "es5",
        "lib": ["es6"],
        "types": ["reflect-metadata"],
        "module": "commonjs",
        "moduleResolution": "node",
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true
    }
}
  • 创建接口
// file interfaces.ts
?
export interface Warrior {
    fight(): string;
    sneak(): string;
}
?
export interface Weapon {
    hit(): string;
}
?
export interface ThrowableWeapon {
    throw(): string;
}
 
 
  • 创建类型
// file types.ts
?
const TYPES = {
    Warrior: Symbol.for("Warrior"),
    Weapon: Symbol.for("Weapon"),
    ThrowableWeapon: Symbol.for("ThrowableWeapon")
};
?
export { TYPES };
  • 创建实体
// file entities.ts
?
import { injectable, inject } from "inversify";
import "reflect-metadata";
import { Weapon, ThrowableWeapon, Warrior } from "./interfaces";
import { TYPES } from "./types";
?
@injectable()
class Katana implements Weapon {
    public hit() {
        return "cut!";
    }
}
?
@injectable()
class Shuriken implements ThrowableWeapon {
    public throw() {
        return "hit!";
    }
}
?
@injectable()
class Ninja implements Warrior {
?
    private _katana: Weapon;
    private _shuriken: ThrowableWeapon;
?
    public constructor(
      @inject(TYPES.Weapon) katana: Weapon,
      @inject(TYPES.ThrowableWeapon) shuriken: ThrowableWeapon
    ) {
        this._katana = katana;
        this._shuriken = shuriken;
    }
?
    public fight() { return this._katana.hit(); }
    public sneak() { return this._shuriken.throw(); }
?
}
?
export { Ninja, Katana, Shuriken };
 
 
  • 配置容器
// file inversify.config.ts
?
import { Container } from "inversify";
import { TYPES } from "./types";
import { Warrior, Weapon, ThrowableWeapon } from "./interfaces";
import { Ninja, Katana, Shuriken } from "./entities";
?
const myContainer = new Container();
myContainer.bind<Warrior>(TYPES.Warrior).to(Ninja);
myContainer.bind<Weapon>(TYPES.Weapon).to(Katana);
myContainer.bind<ThrowableWeapon>(TYPES.ThrowableWeapon).to(Shuriken);
?
export { myContainer };
 
 
  • 依赖解析
import { myContainer } from "./inversify.config";
import { TYPES } from "./types";
import { Warrior } from "./interfaces";
const ninja = myContainer.get<Warrior>(TYPES.Warrior);
console.log(ninja.fight()); 
console.log(ninja.sneak())

说明

inversify 是一个不错的ioc 可选类库

参考资料

https://github.com/typestack/typedi
https://github.com/inversify/InversifyJS
https://github.com/rongfengliang/inversify-lerning

inversify 强大&&轻量级的基于typescript 的ioc 框架

原文:https://www.cnblogs.com/rongfengliang/p/12879488.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!