Angular 2中的依赖注入在使用内联注入器和构造函数注入时创建多个实例

tym*_*spy 8 dependency-injection typescript ionic-framework angular

我正在研究Ionic 2 TypeScript项目.在应用程序启动期间,我通过构造函数注入服务.

@App({
    providers: [ MyService ]
})
export class MyApp {
   constructor( private instance1 : MyService ){}
}
Run Code Online (Sandbox Code Playgroud)

在我使用的另一个班级

let injector = Injector.resolveAndCreate ( [ MyService ] );
let instance2 = injector .get( MyService  );
Run Code Online (Sandbox Code Playgroud)

我得到两个不同的变量实例instance1和instance2.

有没有办法通过使用内联的Injector和Constructor将它们作为一个实例

Gün*_*uer 2

每个提供者实例都维护“单例”。如果您创建一个新的Injector(就是这样Injector.resolveAndCreate ( [ MyService ] );做的,那么它也有它自己的提供程序实例。因此,该行为是预期的。

您可以将其注入Injector到您的组件和服务中,并创建一个子注入器,然后它可以按预期工作。

如果您需要一个无法注入 Angular 注入器的注入器,则此评论中解释了一种解决方法(使用 Plunker)https://github.com/angular/angular/issues/4112#issuecomment-153811572