依赖倒置
为了应用依赖倒置原则,你可以使用注入符号:
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 也支持使用类和字符串字面量作为服务标识符。