You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Awilix依赖注入时出现AwilixResolutionError: Could not resolve 'run'问题求助

Awilix注入报错:AwilixResolutionError: Could not resolve 'run'

问题简述

使用Awilix实现依赖注入时,执行函数程序崩溃,抛出错误:AwilixResolutionError: Could not resolve 'run'

相关代码片段

依赖注入配置文件

const container = awilix.createContainer({
   injectionMode: awilix.InjectionMode.PROXY,
});
container.register({
   userRepo: awilix.asClass(UserMock),
   getUserById: awilix.asClass(GetUserByIdInteractor),     
   signin: awilix.asClass(Signin),
});
export const signin: Signin = container.resolve('signin');

Signin类

// 存在语法错误
export class new Signin extends UseCase { 
   constructor(private getUserById: GetUserById){ super() }

  async run(username: string, password: string) {
      // some code
  }
} 

GetUserById类

// 存在语法错误
export class new GetUserById { 
   constructor(private userRepo: UserRepository){ super() }

  async run(id: string) {
      // some code
  }
}

UserRepository接口

export interface UserRepository { getById(id: string): Promise<User> }

UserMock实现类

// 存在语法错误
export UserMock implements UserRepository {
    getById(id: string){  
      //some code  
    }
}

GraphQL解析器

export class SigninResolver {
   async signin(@Arg('data', () => SigninInput){
       const res = signin(data.username, data.password);
       return res;
   }
}

解决方案

  • 修复类定义的语法错误

    • Signin和GetUserById类的export class new是无效语法,需删除new,改为export class Signin和export class GetUserById
    • UserMock类缺少class关键字,正确写法为export class UserMock implements UserRepository
  • 确保依赖注册与构造参数名匹配
    Awilix默认按参数名注入依赖,当前注册getUserById时使用的类是GetUserByIdInteractor,但Signin构造函数依赖的类型是GetUserById,二者需保持一致:

    • 要么将注册项改为getUserById: awilix.asClass(GetUserById)
    • 要么将Signin构造函数的参数名改为getUserByIdInteractor,同时注册key对应改为getUserByIdInteractor
  • 修正实例调用方式
    解析器中直接调用signin(...)是错误的,signin是Signin类的实例,需调用其run方法;且run是异步方法,必须加await:

    async signin(@Arg('data', () => SigninInput) data) {
         const res = await signin.run(data.username, data.password);
         return res;
     }
    

内容的提问来源于stack exchange,提问作者Jhonatan Malara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 01:46:47