typescript - Inversify 实例未正确注入
问题描述
usersController 试图调用 getUsers 以响应用户的请求,但我收到此错误
TypeError:无法读取未定义的属性“getUsers”
我不知道这是什么原因。我见过一些类似的问题,但无法解决。
有人能帮我吗?
顺便一提。我们还将反射元数据导入 index.ts。
使用箭头功能没有帮助。
@Get('/')
public getAll = async () => {
return await this.userService.getUsers();
};
ーーーーーーーーーーーーーーーーーーーーーーーー</p>
用户控制器.ts
import {
JsonController,
Param,
Body,
Get,
Post,
Put,
Delete,
QueryParam,
} from 'routing-controllers';
import IUserService from '@src/application/service/users/IUserService';
import {injectable, inject} from 'inversify';
import {TYPES} from '../../constants/types';
@injectable()
@JsonController('/users')
export class UserController {
private userService: IUserService;
constructor(@inject(TYPES.UserService) userService: IUserService) {
this.userService = userService;
}
@Get('/')
async getAll() {
return await this.userService.getUsers();
}
@Get('/:id')
async getOne(@Param('id') id: number) {
return await this.userService.getUser(id);
}
}
反转-config.ts
import {Container} from 'inversify';
import {TYPES} from '../constants/types';
// interfaces
import IUserService from '@src/application/service/users/IUserService';
import IUserRepository from '@src/model/repository/user/interfaces/IUserRepository';
// implementations
import UserService from '@src/application/service/users/UserService';
import UserRepository from '@src/model/repository/user/UserRepository';
const container = new Container();
//users
container.bind<IUserService>(TYPES.UserService).to(UserService);
container.bind<IUserRepository>(TYPES.UserRepository).to(UserRepository);
export {container};
类型.ts
const TYPES = {
//user
UserService: Symbol.for('UserService'),
UserRepository: Symbol.for('UserRepository'),
};
export {TYPES};
用户服务.ts
import {ConnectionManager} from '@src/infrastructure/typeorm/connection';
import {EntityManager, getConnection} from 'typeorm';
import {injectable, inject} from 'inversify';
import {TYPES} from '@src/constants/types';
import IUserRepository from '@src/model/repository/user/interfaces/IUserRepository';
import IUserService from './IUserService';
import UserMap from '@src/model/repository/user/UserMap';
@injectable()
export default class UserService implements IUserService {
private repository: IUserRepository;
constructor(
@inject(TYPES.UserRepository)
repository: IUserRepository
) {
this.repository = repository;
}
public async getUser(id: number) {
return await this.transaction(async () => {
const queryResult = await this.repository.getUser(id);
return UserMap.toDTO(queryResult);
});
}
public async getUsers() {
return await this.transaction(async () => {
return await this.repository.getUsers();
});
}
private async transaction<T>(
func: (manager: EntityManager) => Promise<T>
): Promise<T> {
await ConnectionManager.createConnection();
return await getConnection().transaction((entityManager: EntityManager) => {
this.repository.initialize(entityManager);
return func(entityManager);
});
}
}
解决方案
推荐阅读
- flutter - 如何在应用栏中放置自定义形状
- flutter - 如何使用手机号码输入先输入零值删除 FLUTTER 文本字段`inputTextFormaters`?
- python - 如何填补日期列中的空白?
- unity3d - Unity - 精灵上不需要的重复纹理
- python - 从变量中读取路径
- html - grep - 如何仅返回列上匹配的字符串部分
- spring - Spring JPA + Oracle 12 C 模式验证问题
- autodesk-forge - Autodesk Forge 数据连接器请求的 csv 文件不完整
- ansible - 通过 Ansible 模块关闭 Ovirt 上的多个虚拟机
- python - sqlite3.OperationalError:没有这样的表:用户