何时使用Angular 2工厂功能?

时间:2016-08-06 18:51:45

标签: angular angular-providers

我无法想象我需要使用工厂提供商的情况。

根据官方文档https://angular.io/docs/ts/latest/guide/dependency-injection.html,情况是人们可能无法从另一个服务中访问服务( service-b )( service-a < / em>),但是,工厂函数(可以访问 service-b )。那么,什么时候会发生这样的事情呢?

1 个答案:

答案 0 :(得分:6)

您只需传递课程

即可注册提供者
providers: [MyService]

仅当Angulars DI可以实例化MyService时才有效。

如果你有例如

@Injectable()
class MyService {
  constructor(private http: Http, private String configVal) {}
}

然后DI 能够创建实例,因为String不是提供者的有效密钥(原始类型不能作为提供者密钥。

如果您需要,可以使用

等工厂功能
providers: [
    {
      provide: MyService, 
      useFactory: (http) => {
        return new MyService(http, 'http://mydbserver.com:12345');
      },
      deps: [Http]
    }
]

通过这种方式,您可以完全控制新实例的创建方式,Angulars DI只需知道需要使用Http实例调用工厂函数。