我注意到我的项目有很多解析器服务,尽管它们使用不同的实体和存储库托管相同的代码。所以我接受了挑战,使用泛型将它们简化为单个解析器服务:
@Injectable()
export class DetailResolver<T, R extends Repository<T>> implements Resolve<T> {
constructor(private repositoryService: R, private router: Router) {}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<T> {
// use repositoryService to resolve this route
}
}
可以指定实体类型 T 和存储库类型 R。但是我无法使用此服务:
const appRoutes: Routes = [
// other routes
{
path: ':id',
component: MessageEditComponent,
resolve: {
message: DetailResolver<Message, MessageService>
}
}
];
@NgModule({
imports: [
RouterModule.forChild(appRoutes)
],
exports: [
RouterModule
],
providers: [
DetailResolver<Message, MessageService>
]
})
一旦我在DetailResolver<Message, MessageService>
编译器中指定泛型类型,我就希望我创建一个实例:
typeof DetailResolver 类型的值不可调用。你的意思是包括新的?
我不太熟悉 angular4 DI 内部。任何人都可以描述什么是错的,这个问题有什么解决方案吗?我正在使用角度 4.3。