Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class 将服务注入类(非组件)Angular2_Class_Angular_Service_Dependency Injection - Fatal编程技术网

Class 将服务注入类(非组件)Angular2

Class 将服务注入类(非组件)Angular2,class,angular,service,dependency-injection,Class,Angular,Service,Dependency Injection,我正在努力寻找将服务注入angular2中的类对象的方法 *注意:这不是一个组件,只是一个类* export class Product { id: number; name: string; manufacturer: string; constructor(product: any) { this.id = product.id; this.name = product.name; this.manufacturer = product.manu

我正在努力寻找将服务注入angular2中的类对象的方法

*注意:这不是一个组件,只是一个类*

export class Product {

  id: number;
  name: string;
  manufacturer: string;

  constructor(product: any) {

    this.id = product.id;
    this.name = product.name;
    this.manufacturer = product.manufacturer;

}
我提出的唯一解决方案是在我创建新产品时将服务引用传递给构造函数。。。ie:我会做
新产品(产品,产品服务)
,而不是
新产品(产品)
。这似乎很乏味,而且容易出错。我宁愿从类中导入引用,也不要弄乱构造函数

我试过ReflectVenjector:

let injector = ReflectiveInjector.resolveAndCreate([ProductService]);
this.productService = injector.get(ProductService);
但是,这会创建一个错误
No provider for Http!(ProductService->Http)在NoProviderError.BaseError[作为构造函数]
(我也非常确定,当我简单地想要引用在应用程序级别实例化的singleton时,这会创建一个新的ProductService)

如果有人知道一个有效的解决方案,我很乐意听到。现在,我将通过构造函数传递引用


谢谢

没有办法将服务注入普通类。Angular DI只注入到组件、指令、服务和管道类中,DI在这些类中创建实例,因为这是注入发生的时候

要从自定义注入器获取
Http
,需要向其提供程序添加,如中所示

或者您传递一个提供它们的父注入器

// constructor of a class instantiated by Angulars DI
constructor(parentInjector:Injector){
  let injector = ReflectiveInjector.resolveAndCreate([ProductService]);
  this.productService = injector.get(ProductService, parentInjector);
}

另请参见

我也在为一个类似的问题而挣扎,而我最终所做的是使该服务成为一个单例服务和一个角度可注入服务

通过这种方式,您可以通过DI将类注入到Angular类中,并调用static
getInstance()
方法来获取类的单例实例

大概是这样的:

从“@angular/core”导入{Injectable};
@可注射()
导出类MyService{
静态实例:MyService;
静态getInstance(){
if(MyService.instance){
返回MyService.instance;
}
MyService.instance=newmyservice();
返回MyService.instance;
}
构造函数(){
如果(!MyService.instance){
MyService.instance=this;
}
返回MyService.instance;
}

}
感谢您的快速响应!是的,对我来说,最简单的事情似乎是在创建类时将对构造函数的引用推送到类。我投了赞成票,因为在我的情况下,我希望整个应用程序都有一个单一的服务实例,这样做很好。但是,如果我在我的应用程序的不同部分需要不同的服务实例呢?如果你的服务依赖于其他组件/服务/模块/等,并且需要将它们注入构造函数,那么这将不会有帮助。这是我提出的解决方案,只是我没有更新服务。我抛出一个异常,即父级未注入服务。此地址是Denis观察到的服务将无法使用依赖关系。