是否有可靠的方法从根注入器检索已创建的实例?我的用例是我需要自己实例化一个类型(使用new
构造)但是在设置所述类型时我需要抓取两个Angular2 Injector管理的实例。
app: ApplicatinRef;
通过DI本身检索上述app
变量。
const rootInjector: Injector = app.injector;
rootInjector.get(SomeInstance);
当我使用上面的代码时,SomeInstance
类型将第二次实例化,我希望它能够检索在引导过程中创建的同一个实例。
但请注意,当我致电
时rootInjector.get(SomeInstance);
在最初调用它之后多次,它不会再次实例化它。因此它只实例化两次:在引导过程中以及第一次调用注入器本身时。
DI层次结构中没有SomeInstance
的其他提供程序,仅在引导时在应用程序级别指定。
我错过了什么吗?
答案 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})]
})
像这样提供将为该组件及其子组件创建一个实例。