跳到主要内容
版本:Next

依赖倒置

为了应用依赖倒置原则,你可以使用注入符号:

import { Container, inject, injectable, ServiceIdentifier } from 'inversify';

interface Weapon {
damage: number;
}

const ninjaServiceId: ServiceIdentifier<Ninja> = Symbol.for('NinjaServiceId');

const weaponServiceId: ServiceIdentifier<Weapon> =
Symbol.for('WeaponServiceId');

@injectable()
class Katana {
public readonly damage: number = 10;
}

@injectable()
class Ninja {
constructor(
@inject(weaponServiceId)
public readonly weapon: Weapon,
) {}
}

const container: Container = new Container();

container.bind(ninjaServiceId).to(Ninja);
container.bind(weaponServiceId).to(Katana);

const ninja: Ninja = container.get(ninjaServiceId);

console.log(ninja.weapon.damage);

通过使用符号,你可以提供接口实现,而依赖类不需要知道依赖实现的细节。

备注

虽然推荐为此目的使用符号,但 InversifyJS 也支持使用类和字符串字面量作为服务标识符。