我有一个像这样的解析器
@Injectable({ providedIn: 'root' })
export class CandidateResolver implements Resolve<Observable<Candidate>> {
constructor(private service: CandidateService) {
}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Candidate> {
return this.service.getCandidate(route.params.candidateId);
}
}
然后我有CandidateService的2个子类
@Injectable({providedIn: 'root'})
export class AgencyOwnerCandidateService extends CandidateService
@Injectable({providedIn: 'root'})
export class RecruiterCandidateService extends CandidateService
我在AgencyOwnerModule
和RecruiterModule
这两个模块中分别注册了这样的服务。
const routes: Routes = [
{
path: ':orgId/agency-owner/candidates/:candidateId',
component: AgencyOwnerCandidateComponent,
resolve: {
candidate: CandidateResolver
}
}
];
@NgModule({
declarations: [
AgencyOwnerCandidateComponent
],
imports: [
RouterModule.forChild(routes)
],
providers: [
{
provide: CandidateService,
useClass: AgencyOwnerCandidateService
}
]
})
export class AgencyOwnerCandidatesModule {
}
当我实际运行路线时,它得到了错误的具体类型。我显然明白了为什么,因为所有模块都是基于令牌名称加载模块的。
有什么办法可以像我期望的那样控制用DI加载哪种具体类型吗?
答案 0 :(得分:0)
您的基本解析器无法标记为@Injectable。
只需删除装饰器,然后将其保留为普通的“纯” TS类即可。