1
4

2 回答 2

3

当前,您需要提供OpaqueToken者的类型、字符串名称或 as 键。
不支持接口,因为信息在运行时不可用。如果添加了这个,我相信 DI 会支持它们(Dart 已经支持它)。

于 2016-03-20T15:38:10.127 回答
1

如果您使用的是 TypeScript,我有一个适合您的解决方案。

我没有使用 Angular 2.0,但我们开发了类似的 DI 库(intakejs)。问题是 TS 编译器仅为类而不是接口发出反射元数据(它们被视为“对象”)。

希望他们能进一步添加此类功能,但现在我们正在使用基于 TypeScript声明合并功能的 hack。这个想法是您可以声明接口,并将其与字符串或其他一些运行时 id 合并,如下所示:

export interface IMyInjectable {
    foo(): string;
}
export const IMyInjectable = 'MyInjectable';

假设您已经实现了该接口:

@Injectable('MyInjectable')
class MyInjectable implements IMyInjectable {
    foo(): string { return 'hello' }
}

然后你可以依赖你的消费者类中的抽象:

class MyConsumer {

    @Inject(IMyInjectable)
    private myInjectable: IMyInjectable;

}

我希望这个小技巧能解决你的问题。

于 2016-03-21T10:13:58.727 回答