我注意到我的項目有很多resolver儘管與不同的實體和存儲庫一起工作的服務託管了相同的代碼。所以我接受了挑戰,以減少他們使用泛型單解析服務:如何提供在Angular4中使用泛型的服務?
@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。