Angular2 - 从root / app注入器中检索已缓存的实例

时间:2016-06-22 21:41:24

标签: dependency-injection angular

是否有可靠的方法从根注入器检索已创建的实例?我的用例是我需要自己实例化一个类型(使用new构造)但是在设置所述类型时我需要抓取两个Angular2 Injector管理的实例。

app:  ApplicatinRef;

通过DI本身检索上述app变量。

const rootInjector: Injector = app.injector;
rootInjector.get(SomeInstance);

当我使用上面的代码时,SomeInstance类型将第二次实例化,我希望它能够检索在引导过程中创建的同一个实例。

但请注意,当我致电

rootInjector.get(SomeInstance);

在最初调用它之后多次,它不会再次实例化它。因此它只实例化两次:在引导过程中以及第一次调用注入器本身时。

DI层次结构中没有SomeInstance的其他提供程序,仅在引导时在应用程序级别指定。

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

您不需要以这种方式获得喷射器,角度已经注入喷射器。如果您未在任何其他位置提供,则实例将与层次结构中的所有组件相同。此外,您不需要直接使用注入器,您可以在构造函数中请求您的服务实例,如下所示:

...
constructor(private serviceInstance : ServiceClassName){
    this.serviceInstance.doSomething();
}

如果您在主要组件中提供此实例,则所有组件中的实例都相同:

import { provide } from '@angular/core';
...
bootstrap(..., provide(ServiceClassName, {useClass : ServiceClassName}));

但您可以使用提供程序配置参数:

在层次结构的任何位置添加此实例
import { provide } from '@angular/core';
...
@Component({
...
providers : [provide(ServiceClassName, {useClass : ServiceClassName})]
})

像这样提供将为该组件及其子组件创建一个实例。