2

angular 2で次の例外が発生しています。

EXCEPTION: Uncaught (in promise): Error: No provider for SettingsService!
Error: DI Error
    at NoProviderError.BaseError [as constructor] (http://localhost:5555/node_modules/@angular/core/bundles/core.umd.js:1244:31) [angular]
    at NoProviderError.AbstractProviderError [as constructor] (http://localhost:5555/node_modules/@angular/core/bundles/core.umd.js:1365:20) [angular]
    at new NoProviderError (http://localhost:5555/node_modules/@angular/core/bundles/core.umd.js:1405:20) [angular]
    at ReflectiveInjector_._throwOrNull (http://localhost:5555/node_modules/@angular/core/bundles/core.umd.js:2937:23) [angular]
    at ReflectiveInjector_._getByKeyDefault (http://localhost:5555/node_modules/@angular/core/bundles/core.umd.js:2976:29) [angular]
    at ReflectiveInjector_._getByKey (http://localhost:5555/node_modules/@angular/core/bundles/core.umd.js:2908:29) [angular]
    at ReflectiveInjector_.get (http://localhost:5555/node_modules/@angular/core/bundles/core.umd.js:2777:25) [angular]
    at AppModuleInjector.get (/AppModule/module.ngfactory.js:483:165) [angular]
    at AppModuleInjector.getInternal (/AppModule/module.ngfactory.js:621:49) [angular]
    at AppModuleInjector.NgModuleInjector.get (http://localhost:5555/node_modules/@angular/core/bundles/core.umd.js:8490:48) [angular]
    at PreActivation.getToken (http://localhost:5555/node_modules/@angular/router/bundles/router.umd.js:4160:29) [angular]
    at MapSubscriber.eval [as project] (http://localhost:5555/node_modules/@angular/router/bundles/router.umd.js:4056:52) [angular]
    at MapSubscriber._next (http://localhost:5555/node_modules/.tmp/Rx.min.js?1488555021058:11:17343) [angular]
    at MapSubscriber.Subscriber.next (http://localhost:5555/node_modules/.tmp/Rx.min.js?1488555021058:11:13507) [angular]

この問題は、プロバイダーを介した angular 2 DI セットアップが、Authentication Guard クラスで使用されている SettingsService を解決できないことに関連しています。

AppModule のプロバイダには次の設定があります

...
providers: [
Service1,
Service2,
KCService,
SettingsService,
AuthenticationGuard,
{
  provide: Http,
  useFactory:
  (backend: XHRBackend,
    defaultOptions: RequestOptions,
    kcService:KCService) => new KCHttp(backend, defaultOptions, kcService),
  deps: [XHRBackend, RequestOptions, KCService]
},
{
  provide: APP_BASE_HREF,
  useValue: '<%= APP_BASE %>'
}],
bootstrap: [AppComponent]
....

認証ガードには次のものがあります

...
@Injectable()
export class AuthenticationGuard implements CanActivate {

constructor(
private router: Router,
private kcService: KCService,
private http: Http,
private settingsService: SettingsService
) {
}

canActivate(route: ActivatedRouteSnapshot) {
...

このエラーは、AppModule が AuthenticationGuard を作成しようとしていて、DI を介して SettingsService を解決または作成できない場合に発生しています。DI をセットアップするためのより良い方法、またはこの問題をデバッグするためのより良い方法はありますか?

4

1 に答える 1

0

Remove the unwanted constructor parameter from below code

constructor(
private router: Router,
private kcService: KCService,
private http: Http,
private settingsService: SettingsService
) {
}
于 2018-07-05T03:54:49.493 に答える