我正在尝试与托管角度应用程序共享使用ng g library
生成的npm软件包中的服务。我知道如何对组件或指令执行此操作,但是当涉及到服务时,我会迷路。
在库中,我有以下文件:
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
是否有人知道可能导致此错误的原因? 预先谢谢你。
答案 0 :(得分:1)
The
@Injectable({
providedIn: 'root'
})
不需要。只需使用
@Injectable()
,因为您已经在forRoot
方法中提供了它。