你有这个单身人士课程:
class Singleton {
static final Singleton _singleton = new Singleton._internal();
factory Singleton() {
return _singleton;
}
Singleton._internal();
}
我想以这种方式在我的课程中注入一个Logger:
class Singleton {
static final Singleton _singleton = new Singleton._internal();
factory Singleton( @Inject(LoggerService) this.log) {
return _singleton;
}
Singleton._internal();
}
但似乎Factory不支持注射。
答案 0 :(得分:2)
在我看来,这是Angular的错误方法。 Angular DI本身提供单身。
class Singleton {
final LoggerService log;
Singleton(this.log);
}
bootstrap(AppComponent, [LoggerService, Singleton]);
应该做你想做的事。只要您不向其他地方的提供者添加Singleton
(例如在组件上),Angular2将始终注入相同的实例。
如果您仍想保持上述模式,请使用
bootstrap(AppComponent, [
LoggerService,
provide(Singleton,
useFactory: (log) => new Singleton(log),
deps: [LoggerService])
]);