我正在尝试 AdonisJS,但我一直在尝试将服务注入到控制器中。无论我尝试什么,hs构造函数参数VersionsController仍然存在undefined。
我还尝试过用 注释构造VersionController函数@inject(['@ioc:Service/HashService']),但没有成功。我不确定@injectAdonis.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
}
}
Run Code Online (Sandbox Code Playgroud)
/app/Services/HashService.ts
'use strict'
export default class HashService {
async test() {}
}
module.exports = HashService;
Run Code Online (Sandbox Code Playgroud)
应用程序/控制器/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";
}
}
Run Code Online (Sandbox Code Playgroud)
.adonisrc.json
'use strict'
export default class HashService {
async test() {}
}
module.exports = HashService;
Run Code Online (Sandbox Code Playgroud)
你可以使用Adonisjs/fold
@inject只需在您的服务中使用装饰器即可;
例子;
import {HttpContextContract} from "@ioc:Adonis/Core/HttpContext";
import UserEditValidator from "App/Validators/UserEditValidator";
import UserRepository from "App/Repository/UserRepository";
import {inject} from "@adonisjs/fold";
@inject()
export default class UserService {
constructor(private userRepository: UserRepository) {
}
async update(ctx: HttpContextContract) {
//do your stuff
}
}
Run Code Online (Sandbox Code Playgroud)
然后在你的控制器中;
import {HttpContextContract} from "@ioc:Adonis/Core/HttpContext";
import UserService from "App/Service/UserService";
import {inject} from "@adonisjs/fold";
@inject()
export default class UserController {
constructor(private userService: UserService) {
}
async edit({ view }){
return view.render('user/edit', {title: 'Edit Profile'})
}
async update(ctx : HttpContextContract){
await this.userService.update(ctx);
return ctx.response.redirect().back()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1205 次 |
| 最近记录: |