我的服务布局如下
class BaseService {
protected handleError() {
// Logics for handling error
}
}
@Injectable()
class PostService extends BaseService {
constructor() {
super();
}
getPosts() {
this.http
.get(url)
.subscribe(cb)
.catch(this.handleError);
}
}
现在我想让BaseService在接收401时将用户重定向到登录页面,但这会污染每个派生服务,让他们也注入了一个看起来不太合适的路由器,因为派生服务没有&#39 ;需要这个提供者。此版本列出如下:
class BaseService {
constructor(private router: Router) {
}
protected handleError() {
// Logics for handling error
if (status_code === 401) {
this.router.nagivate(['/login']);
}
}
}
@Injectable()
class PostService extends BaseService {
// Polluted here↓
constructor(private router: Router) {
super(router);
}
getPosts() {
this.http
.get(url)
.subscribe(cb)
.catch(this.handleError);
}
}
然后我试图找到一种方法来手动获取注入的路由器提供商:
class BaseService {
private router: Router;
costructor() {
let injector = ReflectiveInjector.fromResolvedProviders([Router]);
this.router = injector.get(Router);
}
}
这并不起作用,因为我没有提供路由器所需的所有令牌:
未处理承诺拒绝:无法解析'路由器'(?,?,?,?,?,?,?,?)的所有参数。确保所有参数都使用Inject进行修饰或具有有效的类型注释,并且“'路由器'用Injectable装饰。
鉴于背景,我的问题有两方面:
谢谢!