应用程序模块注入器未返回任何服务提供者

时间:2019-03-29 17:08:58

标签: angular typescript angular-resolver

我正在尝试根据URL中的查询参数访问解析器中的多个服务。在这种情况下,我将AppModule注射器与get函数一起使用,但收到此错误:

  

ERROR错误:未捕获(承诺):错误:   StaticInjectorError(AppModule)[BestDramaMovieService]:
  StaticInjectorError(平台:核心)[BestDramaMovieService]:       NullInjectorError:没有BestDramaMovieService的提供程序!错误:StaticInjectorError(AppModule)[BestDramaMovieService]:
  StaticInjectorError(平台:核心)[BestDramaMovieService]:       NullInjectorError:没有BestDramaMovieService的提供程序!

服务:

@Injectable({
  providedIn: 'root'
})
export class BestDramaMovieService extends MovieBase {
}

解析器:

import { ApplicationInjector } from '../../../main';


@Injectable({
    providedIn:'root'
})
export class MovieDetailResolver implements Resolve<IMovieDetails>{

    movieService: MovieBase;
    constructor()
    {
        this.movieService = ApplicationInjector.get('BestDramaMovieService');
        //the problem is here !
    }

    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<IMovieDetails> {
        debugger;
        console.log(route.params["id"]);
        return this.movieService.GetMoiveById(route.params["id"]);
    }

}

我如何服用ApplicationInjector

export let ApplicationInjector:Injector;

platformBrowserDynamic().bootstrapModule(AppModule).then((ref)=> ApplicationInjector = ref.injector)
  .catch(err => console.error(err));

根据条件,我将采用其他派生类来扩展MovieBase。我知道我可以将所有这些注入到构造函数中,但是我想知道如何使用Injector进行注入。另外,由于这个错误,我在模块的[providers]中添加了providers: [BestDramaMovieService]。我知道因为providedIn:'root'不需要这样做。例外仍然存在。

此外,我在控制台中收到此警告:

  

客户:154通函   检测到依赖项:src \ app \ app-routing.module.ts->   src \ app \ movie \ shared \ movie-detail.resolver.ts-> src \ main.ts->   src \ app \ app.module.ts-> src \ app \ app-routing.module.ts

如果我这样更改解析器中的构造函数,则不会发生警告和异常:

movieService: BestDramaMovieService;
constructor(movieService: BestDramaMovieService)
{
    this.movieService = movieService;

}

1 个答案:

答案 0 :(得分:0)

您的AppModule在哪里? 它应该在那里注册了providers: []