我正在用 inversify 练习 mikroorm。
我有TodoEntity
import { Entity, Property, PrimaryKey, EntityRepositoryType } from '@mikro-orm/core'
import { TodoRepository } from '../../repositories'
@Entity({tableName: 'todo'})
export class TodoEntity {
// [EntityRepositoryType]?: TodoRepository;
@PrimaryKey()
id?: number
@Property()
title: string
@Property()
description: string
constructor(title: string, description: string) {
this.title = title
this.description = description
}
}
这是自定义存储库TodoRepository
import { EntityRepository } from '@mikro-orm/mysql'
import { Repository } from '@mikro-orm/core'
import { TodoEntity } from '../models/entities'
import { injectable } from "inversify"
@injectable()
@Repository(TodoEntity)
export class TodoRepository extends EntityRepository<TodoEntity> {}
我将注入repository
到service
通过
import { injectable, inject } from "inversify"
import { TodoRepository } from "../repositories"
import TYPES from "../../di/types"
import autoBind from "auto-bind";
@injectable()
export class TodoService {
private todoRepository: TodoRepository
constructor (@inject(TYPES.TodoRepository) todoRepository: TodoRepository) {
this.todoRepository = todoRepository
autoBind(this)
}
public async getTodos() {
return await this.todoRepository.findAll()
}
}
这是我的控制器
import { injectable, inject } from "inversify"
import { TodoService } from "../services/todoService"
import { Request, Response, NextFunction} from "express";
import TYPES from "../../di/types";
import autoBind from "auto-bind";
@injectable()
export class TodoController {
todoService: TodoService
constructor(@inject(TYPES.TodoService) todoService: TodoService) {
this.todoService = todoService
autoBind(this)
}
public async getAllTodos(req: Request, res: Response, next: NextFunction) {
res.send(await this.todoService.getTodos())
}
}
这是类型
const TYPES = {
TodoRepository: Symbol.for("TodoRepository"),
TodoService: Symbol.for("TodoService"),
TodoController: Symbol.for("TodoController")
};
export default TYPES
容器
import { TodoRepository } from "../todos/repositories"
import { TodoService } from "../todos/services/todoService"
import { TodoController } from "../todos/controllers/todoController"
import { Container } from "inversify"
import TYPES from "./types"
const container = new Container();
container.bind<TodoController>(TYPES.TodoController).to(TodoController);
container.bind<TodoService>(TYPES.TodoService).to(TodoService);
container.bind<TodoRepository>(TYPES.TodoRepository).to(TodoRepository);
export { container }
如何将自定义存储库注入服务,我有一个错误说
Error: Missing required @injectable annotation in: SqlEntityRepository
但是当我没有包括repository
唯一的 service
和controller
我试图测试转储时。DI 工作正常
我按照这个例子用 mikro orm 反转例子
但在他没有使用自定义回购的例子中,知道我可以从哪里开始解决这个问题吗?