对Symbol的支持

原文链接

在大型应用中,使用字符串作为 InversifyJS 注入类型的标识符可能会导致命名冲突。我们支持并真心建议您使用Symbol而不是字符串。

Symbol是唯一且不可变的数据类型,可以用作对象的属性标识符。Symbol对象是原始数据类型symbol的隐式对象包装器。

import { Container, injectable, inject } from "inversify";

let Symbols = {
	Ninja : Symbol.for("Ninja"),
	Katana : Symbol.for("Katana"),
	Shuriken : Symbol.for("Shuriken")
};

@injectable()
class Katana implements Katana {
    public hit() {
        return "cut!";
    }
}

@injectable()
class Shuriken implements Shuriken {
    public throw() {
        return "hit!";
    }
}

@injectable()
class Ninja implements Ninja {

    private _katana: Katana;
    private _shuriken: Shuriken;

    public constructor(
	    @inject(Symbols.Katana) katana: Katana,
	    @inject(Symbols.Shuriken) shuriken: Shuriken
    ) {
        this._katana = katana;
        this._shuriken = shuriken;
    }

    public fight() { return this._katana.hit(); };
    public sneak() { return this._shuriken.throw(); };

}

var container = new Container();
container.bind<Ninja>(Symbols.Ninja).to(Ninja);
container.bind<Katana>(Symbols.Katana).to(Katana);
container.bind<Shuriken>(Symbols.Shuriken).to(Shuriken);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
上次更新: 1/5/2020, 1:11:10 PM