Dependency injection Angular2-在组件外部使用依赖项注入
在我的应用程序中,我使用DI在需要这些信息的不同组件周围传递有关用户的信息。 这意味着我有一个像这样的Dependency injection Angular2-在组件外部使用依赖项注入,dependency-injection,angular,Dependency Injection,Angular,在我的应用程序中,我使用DI在需要这些信息的不同组件周围传递有关用户的信息。 这意味着我有一个像这样的main.ts类 从“/app.component”导入{AppComponent}; 从“./UserLogged”导入{UserLogged} 引导(AppComponent,[UserLogged]); 需要使用UserLogged实例的组件具有如下构造函数 构造函数(私有用户:UserLogged) 现在我想在简单的TypeScript类(不是@Component)中使用相同的Use
main.ts
类
从“/app.component”导入{AppComponent};
从“./UserLogged”导入{UserLogged}
引导(AppComponent,[UserLogged]);
需要使用UserLogged
实例的组件具有如下构造函数
构造函数(私有用户:UserLogged)
现在我想在简单的TypeScript类(不是
@Component
)中使用相同的UserLogged
实例。这可能吗?换句话说,如果我在@组件
之外,我也可以获得DI注入的UserLogged
的相同实例吗?此构造函数也适用于服务(DI创建的其他类)
bootstrap(AppComponent,[OtherClass,userlogged]);
@可注射()
导出类用户日志{
日志(文本){
console.log(文本);
}
}
@可注射()
导出类其他类{
构造函数(私有_用户:UserLogged){}
}
类SomeComponent{
构造函数(私有otherClass:otherClass){
this.otherClass._user.log('xxx');
}
}
如果使用newsomeclass()
创建这些类,则可以像
class组件{
建造商(专用注射器:注射器){
让userLog=this.\u injector.get(UserLogged);
新的SomeClass(userLog);
}
}
要在类中使用依赖项注入,您需要有一个装饰器,@Injectable
一个
@Injectable()
export class SomeClass {
constructor(private dep:SomeDependency) {
}
}
名称Injectable
实际上并不是不言自明的。这是为了使类内的注入成为可能(而不是注入到另一个类中)
SomeDependency
类的提供程序需要在发起调用的组件中可见
有关依赖注入和分层注入的更多详细信息,请参见此问题:
提供者:[UserLogged]
?
如果是这样的话,这就行了
providers: [ provide(UserLogged, {useClass: UserLogged} ]
将上述内容添加到您的引导程序中,当您“不想使用@Component”时,您就可以开始了
样本
export class Sample{
constructor(private ulog : UserLogged){}
}
在您的情况下,引导将是:
import {provide} from 'angular2/core';
import {HTTP_PROVIDERS} from 'angular2/http';
bootstrap(AppComponent,[HTTP_PROVIDERS,provide(UserLogged, { useClass : UserLogged})]);
我添加了HTTP_提供者,演示如何添加多个提供者。
干杯 在您引导的文件中:
从“/app.component”导入{AppComponent};
从“/UserLogged”导入{UserLogged};
宣布全球{
无功注入器:注入器;
}
引导(AppComponent,[UserLogged])。然后((appRef)=>{
注入器=近似注入器;
});
在其他文件中:
从“../path/to/UserLogged”导入{UserLogged};
类TestClass{
私有userLogged:userLogged;
构造函数(){
this.userLogged=injector.get(userLogged);
}
}