Angular 6库根提供者与工厂

时间:2018-09-06 17:11:43

标签: angular angular6

我正在尝试使用需要从最终用户应用程序进行配置的服务来构建库。

但是当我构建库时,我得到以下警告:

警告:无法在...中解析CacheService的所有参数,这将成为Angular v6.x中的错误

代码如下:

@Injectable()
export class CacheService {
  private config: Config;

  constructor(config: Config) {
    this.config = config;
  }
}

@NgModule({

})
export class MyModule {
  static forRoot(config: Config): ModuleWithProviders {
    return {
      ngModule: MyModuleRoot,
      providers: [
        { provide: CacheService, useFactory: cacheServiceFactory, deps: [config] }
      ]
    };
  }
}

export function cacheServiceFactory(config: Config): CacheService {
  return new CacheService(config);
}

当我尝试在构造函数中注入CacheService来运行我的主应用程序时,我得到了 AppComponent_Host.ngfactory.js? [sm]:1错误错误:StaticInjectorError(AppModule)[CacheService-> [object Object]]:

但是我不想注入它,而是使用我创建的工厂...

我的代码怎么了?

1 个答案:

答案 0 :(得分:0)

好的,这是解决方案,

您需要提供配置,以便可以将其注入服务中。 这样,就不需要工厂了!

@NgModule({

})
export class MyModule {

  static forRoot(config: Config): ModuleWithProviders {
    return {
      ngModule: MyModuleRoot,
      providers: [
        { provide: Config, useValue: config },
        CacheService
      ]
    };
  }

}