【发布时间】:2021-11-01 08:38:06
【问题描述】:
我正在尝试 AdonisJS,但我一直在尝试将服务注入控制器。无论我尝试什么,VersionsController 中的 hs 构造函数参数仍然是 undefined。
我还尝试用@inject(['@ioc:Service/HashService']) 注释VersionController 构造函数,但没有成功。我不确定@inject 是否适合 Adonis.js v5。
如何正确地将服务类注入控制器?
/providers/AppProvider.ts
import { ApplicationContract } from '@ioc:Adonis/Core/Application'
import HashService from 'App/Services/HashService';
export default class AppProvider {
protected app: ApplicationContract;
constructor(app: ApplicationContract) {
this.app = app;
}
public register() {
this.app.container.singleton('@ioc:Service/HashService', () => {
return new HashService();
});
}
public async boot() {
// IoC container is ready
}
public async ready() {
// App is ready
}
public async shutdown() {
// Cleanup, since app is going down
}
}
/app/Services/HashService.ts
'use strict'
export default class HashService {
async test() {}
}
module.exports = HashService;
app/Controllers/Http/VersionsController.ts
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
import { HashService } from '@ioc:Service/HashService'
export default class VersionsController {
protected hs: HashService
constructor(hs: HashService) {
this.hs = hs;
console.log("hashservice is " + hs);
}
public async get(ctx: HttpContextContract) {
return [
{
id: 1,
title: 'a'
}
]
}
public async put(ctx: HttpContextContract) {
return "PUT";
}
}
.adonisrc.json
{
"typescript": true,
"commands": [
"./commands",
"@adonisjs/core/build/commands/index.js",
"@adonisjs/repl/build/commands"
],
"exceptionHandlerNamespace": "App/Exceptions/Handler",
"aliases": {
"App": "app",
"Config": "config",
"Database": "database",
"Contracts": "contracts"
},
"preloads": [
"./start/routes",
"./start/kernel"
],
"providers": [
"./providers/AppProvider",
"@adonisjs/core"
],
"aceProviders": [
"@adonisjs/repl"
]
}
【问题讨论】:
标签: adonis.js