如何在 angular 2/4 应用程序的 NgModule 中将对象传递给服务构造函数

How to pass an object to service constructor in NgModule of angular 2/4 app

所以这里有一个服务说 MyService

MyService 在其实现中有一个构造函数

@Injectable() 
export class MyService {
    constructor(myObject: MyClass) {}
}

现在 myObject 是我在注入服务时需要传递的 MyClass 类型

我可以使用 MyService 的一种方法是

_myService = new MyService(new Myclass())

然后访问MyService中的方法

this._myService.someMethod();

但是使用这种方法我必须在我使用 MyService 的每个组件中执行此操作

我想将值传递给 providers 数组中 NgModule 中的 MyService 构造函数

因此,在任何我需要 MyService 的组件中,我都可以使用

export class MyComponent {
    constructor( _myService: MyService) {}
    this._myService.someMethod();
}

一种方法是使用 ValueProvider

使 Myclass 对象也成为可注射对象
{ provide: Myclass, useValue: new Myclass() }

并将其添加到提供商。然后 DI 机制可以知道 Myclass 类型并正确注入。服务的构造函数必须提供参数的类型

export class MyService {    
   constructor(myObject: MyClass) {}    
}

并根据需要注入 MyService

export class MyComponent {
   constructor( _myService: MyService) {}
}

如果所有实例都相同,您也可以在服务中创建该实例,并从构造函数中省略。

所以我想出了怎么做

可以通过以下方式使用useFactory来完成

{
  provide: MyService, 
  useFactory: MyServiceFactory  
}

export function MyServiceFactory() {
  return new MyService(new MyClass());
}

这将传递 MyService 构造函数所需的 MyClass 对象,此后可以将该服务注入任何组件。

export class MyComponent {
  constructor( _myService: MyService) {}
}