Open
Description
Description
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.
Actual behavior
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.