何时使用Angular 2工厂功能?

joh*_*col 5 angular-providers angular

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

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

Gün*_*uer 6

您只需传递课程即可注册提供者

providers: [MyService]
Run Code Online (Sandbox Code Playgroud)

这只适用于Angulars DI可以实例化的情况MyService.

如果你有例如

@Injectable()
class MyService {
  constructor(private http: Http, private String configVal) {}
}
Run Code Online (Sandbox Code Playgroud)

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

如果您需要,可以使用像

providers: [
    {
      provide: MyService, 
      useFactory: (http) => {
        return new MyService(http, 'http://mydbserver.com:12345');
      },
      deps: [Http]
    }
]
Run Code Online (Sandbox Code Playgroud)

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

  • 例如,如果您想注入没有 `Injectable()` 装饰器的类,并且由于您不拥有源代码而无法添加它。我确定还有其他几个。 (2认同)