Cannot use TypeDI as explained on the README for basic services.
Obviously, it is written that it only requires the @Service
on service side (seems legit), but this actually doesn't work without telling @Service
before the controller as well.
Minimal code-snippet showcasing the problem
Controller snippet
import { Service } from 'typedi' import { Get, JsonController, Param, State } from 'routing-controllers' import { CollaboratorService } from '../services/CollaboratorService' @JsonController('/service/:serviceId/collaborator') @Service() // This shouldn't be required as described on the README, but it is actually required to run the app as expected export class CollaboratorController { constructor(private collaboratorService: CollaboratorService) { } @Get('/') async getCollaborators (@State('user') user: User, @Param('serviceId') serviceId: number) { return await this.collaboratorService.getCollaborators( user.id, serviceId ) }
Actual service snippet
import { Service } from 'typedi' @Service() export class CollaboratorService { async getCollaborators (userId: number, serviceId: number) { ... } }Expected behavior
I've imported everything and created the DI Container before the app, the Controller should be working without the @Service
decorator declaration.
It doesn't, if I try to run the code without the @Service
decorator on top of the Controller, I'll get the following error:
{ "name": "ServiceNotFoundError", "message": "Service with \"MaybeConstructable<CollaboratorService>\" identifier was not found in the container. Register it before usage via explicitly calling the \"Container.set\" function or using the \"@Service()\" decorator.", "stack": "ServiceNotFoundError: Service with \"MaybeConstructable<CollaboratorService>\" identifier was not found in the container. Register it before usage via explicitly calling the \"Container.set\" function or using the \"@Service()\" decorator.\n at ContainerInstance.get (L:\\...\\node_modules\\typedi\\cjs\\container-instance.class.js:45:15)\n at Object.value (L:\\...\\node_modules\\typedi\\cjs\\decorators\\inject.decorator.js:31:42)\n at L:\\...\\node_modules\\typedi\\cjs\\container-instance.class.js:286:58\n at Array.forEach (<anonymous>)\n at ContainerInstance.applyPropertyHandlers (L:\\...\\node_modules\\typedi\\cjs\\container-instance.class.js:280:46)\n at ContainerInstance.getServiceValue (L:\\...\\node_modules\\typedi\\cjs\\container-instance.class.js:240:18)\n at ContainerInstance.get (L:\\...\\node_modules\\typedi\\cjs\\container-instance.class.js:29:25)\n at Function.get (L:\\...\\node_modules\\typedi\\cjs\\container.class.js:28:36)\n at Object.getFromContainer (L:\\...\\node_modules\\routing-controllers\\container.js:40:42)\n at ControllerMetadata.getInstance (L:\\...\\node_modules\\routing-controllers\\metadata\\ControllerMetadata.js:26:28)", "normalizedIdentifier": "MaybeConstructable<CollaboratorService>" }
I don't know if this is an upstream issue or not.
imjared, feimosi, songjiachao, MykleNero, SmileJayden and 11 morehectorsum
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4