Dependency injection Angular2-在组件外部使用依赖项注入

Dependency injection Angular2-在组件外部使用依赖项注入,dependency-injection,angular,Dependency Injection,Angular,在我的应用程序中,我使用DI在需要这些信息的不同组件周围传递有关用户的信息。 这意味着我有一个像这样的main.ts类 从“/app.component”导入{AppComponent}; 从“./UserLogged”导入{UserLogged} 引导(AppComponent,[UserLogged]); 需要使用UserLogged实例的组件具有如下构造函数 构造函数(私有用户:UserLogged) 现在我想在简单的TypeScript类(不是@Component)中使用相同的Use

在我的应用程序中,我使用DI在需要这些信息的不同组件周围传递有关用户的信息。 这意味着我有一个像这样的
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);
}
}