我正在尝试根据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;
}
答案 0 :(得分:0)
您的AppModule在哪里?
它应该在那里注册了providers: []
。