问问题
170 次
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 回答