注入具有角度2的Dart单例

时间:2016-03-08 13:56:32

标签: dart singleton angular

你有这个单身人士课程:

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不支持注射。

1 个答案:

答案 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])
]);