如何从ng generate library生成的库中共享Angular服务?

时间:2019-08-22 15:56:27

标签: angular typescript angular-services

我正在尝试与托管角度应用程序共享使用ng g library生成的npm软件包中的服务。我知道如何对组件或指令执行此操作,但是当涉及到服务时,我会迷路。

在库中,我有以下文件:

  • authentication.service.ts
  • authentication.module.ts

public-api.ts中提到了所有内容,我可以将它们导入到我的托管应用中。

authentication.service.ts:(我也尝试了不使用providedIn: 'root'的情况)

@Injectable({
  providedIn: 'root'
})
export class AuthenticationService {
...
}

authentication.module.ts:

@NgModule({
})
export class AuthenticationModule {
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: AuthenticationModule,
      providers: [AuthenticationService]
    };
  }
}

托管应用程序的app.module.ts:

import { AuthenticationService } from '@custom/lib';
import { AuthenticationModule } from '@custom/lib';

export function appInitFactory(
    injector: Injector,
    authenticationService: AuthenticationService,
    configService: ConfigService
  ): any {
    return () =>
      loadConfig(configService, authenticationService)
        .then(() => checkLogIn(injector, authenticationService));
}

@NgModule({
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    AuthenticationModule.forRoot()
  ],
  providers: [
    AuthenticationService,
    {
      provide: LocationStrategy,
      useClass: HashLocationStrategy
    },
    {
      provide: APP_INITIALIZER,
      useFactory: appInitFactory,
      deps: [Injector, AuthenticationService, ConfigService],
      multi: true,
    }

  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

我想将AuthenticationService注入到appInitFactory中,因为在那里我要从JSON文件加载应用程序配置,并在初始化托管应用程序之前检查身份验证。

我得到的错误是:

core.js:15723 ERROR Error: Uncaught (in promise): Error: StaticInjectorError(AppModule)[AuthenticationService]: 
  StaticInjectorError(Platform: core)[AuthenticationService]: 
    NullInjectorError: No provider for AuthenticationService!
Error: StaticInjectorError(AppModule)[AuthenticationService]: 
  StaticInjectorError(Platform: core)[AuthenticationService]: 
    NullInjectorError: No provider for AuthenticationService!
    at NullInjector.push../node_modules/@angular/core/fesm5/core.js.NullInjector.get

是否有人知道可能导致此错误的原因? 预先谢谢你。

1 个答案:

答案 0 :(得分:1)

The

@Injectable({
  providedIn: 'root'
})
不需要

。只需使用

@Injectable()

,因为您已经在forRoot方法中提供了它。