如何在 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) {}
}
所以这里有一个服务说 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) {}
}