0

我创建了以下类控制器。

class ProjectsController {
  queryBus: QueryBus;

  commandBus: CommandBus;

  constructor(queryBus, commandBus) {
    this.queryBus = queryBus;
    this.commandBus = commandBus;
  }

  async get(req, reply) {
    reply.code(200).send(await this.queryBus.execute<GetOneProjectQuery, String>(GetOneProjectQuery));
  }

这是我注册的路线。


export default async (fastify, opts, done) => {
  const { commandBus, queryBus } = fastify.di;
  const projectsController = new ProjectsController(queryBus, commandBus);
  await fastify.get("/", await projectsController.get);
  done();
};

当我提出请求时,我this.queryBus的总是未定义的。我不知道如何将两个对象注入到一个类中,这样我就可以在一个get方法中使用它们。当然,当我创建

await fastify.get("/", async(req, reply)=>{this.queryBus...});

它工作正常。

你能告诉我,如果有可能以面向对象的方式做到这一点?

4

1 回答 1

0

为了解决这个问题,我使用了 reddit 用户响应中的这段代码。

function factory(controller) {
  return {
    get: async (req, reply) => controller.get(req, reply),
    post: async (req, reply) => controller.post(req, reply),
  };
}

export default async (fastify, opts, done) => {
  const { commandBus, queryBus } = fastify.di;
  const projectsController = new ProjectsController(queryBus, commandBus);
  await fastify.get("/", factory(projectsController).get);
  done();
};

于 2020-02-12T19:27:12.337 回答