[Angular 依赖注入详谈] Angular Module Providers几种类型的实现源代码具体位置

434 阅读1分钟
providers: [{ provide: JerrySandBoxService },
  { provide: GreetingService,  useClass: EnglishGreetingService},
  {
    provide: 'apiUrl',
    useValue: 'http://localhost:4200/heros'
  },
  { provide: APP_CONFIG, useValue: HERO_DI_CONFIG }
],

在Angular @NgModule修饰的module里能够指定providers数组的值,

其中provider类型定义如下:

export declare type Provider = TypeProvider | ValueProvider | ClassProvider | ConstructorProvider | ExistingProvider | FactoryProvider | any[];

位置:

这几种方式的实现分别位于Angular core.js中的providerToFactory方法里的isValueProvider, isFactoryProvider, isExistingProvider判断条件的分支里:

工厂提供商 FactoryProvider

既然是函数方式创建对象,那么就拥有了在运行期动态创建的能力。例如区分是否是生产模式来创建不同的对象。

onst MessageServiceFactory = () => {
  if (environment.production) {
    return new MessageService();
  } else {
    return new NewMessageService();
  }
};

{
  // ...
  providers: [
    {
      provide: MessageService,
      useFactory: MessageServiceFactory
    }
  ]
  // ...
}

要获取更多Jerry的原创文章,请关注公众号"汪子熙":