Reputation: 653
I have upgraded Angular to V17 with SSR and when i tried to load page this error is coming.
R3InjectorError(Standalone[_HomeComponent])[_SocketService -> _SocketService -> _SocketService -> WrappedSocket -> WrappedSocket]: NullInjectorError: No provider for WrappedSocket!
Note: - i can not add this inside modules because i am working with SSR Standalone components only.
Need help to resolve this issue by adding these inside providers or by using service.ts
ERROR Error: NullInjectorError: No provider for WrappedSocket!
at t (angular/node_modules/zone.js/fesm2015/zone-error.js:85:33)
at NullInjector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:5626:27)
at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6069:33)
at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6069:33)
at injectInjectorOnly (angular/node_modules/@angular/core/fesm2022/core.mjs:911:40)
at Module.ɵɵinject (angular/node_modules/@angular/core/fesm2022/core.mjs:917:42)
at RoutingConstants (angular/src/app/shared/services/socket.service.ts:10:27)
at eval (angular/node_modules/@angular/core/fesm2022/core.mjs:6189:43)
at runInInjectorProfilerContext (angular/node_modules/@angular/core/fesm2022/core.mjs:867:9)
at R3Injector.hydrate (angular/node_modules/@angular/core/fesm2022/core.mjs:6188:17)
at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6058:33)
at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6069:33)
at ChainedInjector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:15378:36)
at lookupTokenUsingModuleInjector (angular/node_modules/@angular/core/fesm2022/core.mjs:4137:39)
at getOrCreateInjectable (angular/node_modules/@angular/core/fesm2022/core.mjs:4185:12) {
originalStack: 'Error: NullInjectorError: No provider for WrappedSocket!\n' +
' at t (angular/node_modules/zone.js/fesm2015/zone-error.js:85:33)\n' +
' at NullInjector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:5626:27)\n' +
' at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6069:33)\n' +
' at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6069:33)\n' +
' at injectInjectorOnly (angular/node_modules/@angular/core/fesm2022/core.mjs:911:40)\n' +
' at Module.ɵɵinject (angular/node_modules/@angular/core/fesm2022/core.mjs:917:42)\n' +
' at RoutingConstants (angular/src/app/shared/services/socket.service.ts:10:27)\n' +
' at eval (angular/node_modules/@angular/core/fesm2022/core.mjs:6189:43)\n' +
' at runInInjectorProfilerContext (angular/node_modules/@angular/core/fesm2022/core.mjs:867:9)\n' +
' at R3Injector.hydrate (angular/node_modules/@angular/core/fesm2022/core.mjs:6188:17)\n' +
' at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6058:33)\n' +
' at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6069:33)\n' +
' at ChainedInjector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:15378:36)\n' +
' at lookupTokenUsingModuleInjector (angular/node_modules/@angular/core/fesm2022/core.mjs:4137:39)\n' +
' at getOrCreateInjectable (angular/node_modules/@angular/core/fesm2022/core.mjs:4185:12)',
zoneAwareStack: 'Error: NullInjectorError: No provider for WrappedSocket!\n' +
' at t (angular/node_modules/zone.js/fesm2015/zone-error.js:85:33)\n' +
' at NullInjector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:5626:27)\n' +
' at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6069:33)\n' +
' at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6069:33)\n' +
' at injectInjectorOnly (angular/node_modules/@angular/core/fesm2022/core.mjs:911:40)\n' +
' at Module.ɵɵinject (angular/node_modules/@angular/core/fesm2022/core.mjs:917:42)\n' +
' at RoutingConstants (angular/src/app/shared/services/socket.service.ts:10:27)\n' +
' at eval (angular/node_modules/@angular/core/fesm2022/core.mjs:6189:43)\n' +
' at runInInjectorProfilerContext (angular/node_modules/@angular/core/fesm2022/core.mjs:867:9)\n' +
' at R3Injector.hydrate (angular/node_modules/@angular/core/fesm2022/core.mjs:6188:17)\n' +
' at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6058:33)\n' +
' at R3Injector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:6069:33)\n' +
' at ChainedInjector.get (angular/node_modules/@angular/core/fesm2022/core.mjs:15378:36)\n' +
' at lookupTokenUsingModuleInjector (angular/node_modules/@angular/core/fesm2022/core.mjs:4137:39)\n' +
' at getOrCreateInjectable (angular/node_modules/@angular/core/fesm2022/core.mjs:4185:12)',
ngTempTokenPath: null,
ngTokenPath: [
'_SocketService',
'_SocketService',
'WrappedSocket',
'WrappedSocket'
]
}
Upvotes: -1
Views: 586
Reputation: 653
Because i can not make use of Modules in angular 17 I have Created new Service with extends Socket
method and and then impored this new service to my exsiting service.
before
app.module.ts
......................................................................
const config: SocketIoConfig = { url: environment.SOCKET_API, options: {} };
@NgModule({
imports: [
SocketIoModule.forRoot(config),
]
})
......................................................................
socket.service.ts
......................................................................
private socket = inject(Socket)
export class SocketService {
online(id: string){
this.socket.connect(id);
}
}
......................................................................
After
ngx-socket.service.ts
......................................................................
const config: SocketIoConfig = { url: environment.SOCKET_API, options: {} };
@Injectable({
providedIn: "root",
})
export class NgxSocketService extends Socket {
constructor() {
super(config);
this.disconnect();
}
}
......................................................................
socket.service.ts
......................................................................
import { NgxSocketService } from "./ngx-socket.service";
private socket = inject(NgxSocketService);
@Injectable({
providedIn: "root",
})
export class SocketService {
private socket = inject(NgxSocketService);
constructor() {
afterNextRender(() => {
const senderId = this.jwtService.getUserId();
if (senderId) {
this.connect(senderId);
}
});
}
}
}
Upvotes: 1