The problem is that Router can async load some routes. This is why it needs Http. Your Http depends on Router and Router depends on Http. Angular injector is not able to create any of these services.
I had similar problems and one of the solutions can be injecting Injector instead of service and getting service afterwards.
Code:
@Injectable()
export class CustomHttp extends Http {
constructor(backend: ConnectionBackend, defaultOptions: RequestOptions,
private injector: Injector, private dataHelper: DataHelperService) {
super(backend, defaultOptions);
}
public get router(): Router { //this creates router property on your service.
return this.injector.get(Router);
}
...
So, basically, you do not need Router to get instance of Http service. The injection is done when you access router property – only when you want to redirect user. router property is transparent to other parts of code.
If it will not solve problem, you can do the same thing to the rest of injected services (except these to call super).