首页 > 解决方案 > Nestjs:将提供者注入到由关键字 new 创建的对象中

问题描述

我正在尝试将提供程序注入到由new. 可能吗?例如:

@Injectable()
export class SomeService {
}

export class SomeObject {

@Inject()
service: SomeService;
}

let obj = new SomeObject();

它在我的测试中不起作用,obj.service未定义。

标签: javascriptnode.jstypescriptdependency-injectionnestjs

解决方案


不,依赖注入系统仅适用于使用它创建的对象。不过,您可以创建SomeObject自定义提供程序,例如useClass

@Injectable()
class SomeObject {
  constructor(private someService: SomeService) {}
}

@Module({
  providers: [
   SomeService,
   { provide: SomeObject, useClass: SomeObject },
  ],
})
export class ApplicationModule {}

useFactory用于自定义设置逻辑:

const someObjectFactory = {
  provide: 'SomeObject',
  useFactory: (someService: SomeService) => {
    // custom setup logic
    return new SomeObject(someService);
  },
  inject: [SomeService],
};

@Module({
  providers: [SomeService, connectionFactory],
})
export class ApplicationModule {}

推荐阅读