@Inject services in other service - Nest 无法解析依赖项
@Inject services in other service - Nest can't resolve dependencies
我正在尝试将两个服务@Inject 到一个 NestJS 服务中并得到
Nest can't resolve dependencies of the MainServiceImpl (?,
Symbol(MainDao)). Please make sure that the argument at index [0] is
available in the MainModule context
这是服务:
@Injectable()
export class MainServiceImpl implements MainService {
constructor(
@Inject(TYPES.PublishSubscriptionService) private publishSubscriptionService: PublishSubscriptionService,
@Inject(TYPES.MainDao) private mainDao: MainDao
) {}
现在如果我改变顺序,它总是第二个注入的服务得到错误。
TYPES 是 Symbols
的对象
const TYPES = {
PublishSubscriptionService: Symbol('PublishSubscriptionService'),
MainDao: Symbol('MainDao'),
};
export default TYPES;
这里是 index.ts,它正在使用桶装
// start:ng42.barrel
export * from './main.dao.mongo-impl';
export * from './main.dao';
export * from './main';
export * from './main.schema';
export * from './main.service.impl';
export * from './main.service';
// end:ng42.barrel
我错过了什么?
Closed NestJS issue with no resolution
NestJS doc on @Global modules
我不知道 TYPES 是什么,你可以使用@Inject(PublishSubscriptionService) 或者你可以简单地使用:
constructor(
private publishSubscriptionService: PublishSubscriptionService,
private mainDao: MainDao
) {}
如果没有看到你的 MainServieImplModule
或调用包含此服务的任何模块,我不能肯定地说,但如果我不得不猜测,你没有向 Nest 声明你的 providers
正确地用于这两个服务。您需要像这样创建自定义提供程序
@Module({
provides: [
{
provide: TYPES.PublishSubscriptionService,
useClass: PublishSubscriptionService,
},
{
provide: TYPES.MainDao,
useClass: MainDao
},
MainServiceImpl
]
})
export class MainServiceImplModule {}
但是,如果这些提供程序是不同模块的一部分,您将需要确保提供程序是自定义的(如上所述),但也已导出,以便可以在不同的模块中导入和使用它们。没有看到更多你的代码,这个问题是不可能回答的,但我认为这应该给你你需要的方向。如果不是,请编辑您的问题并添加更多信息。
我正在尝试将两个服务@Inject 到一个 NestJS 服务中并得到
Nest can't resolve dependencies of the MainServiceImpl (?, Symbol(MainDao)). Please make sure that the argument at index [0] is available in the MainModule context
这是服务:
@Injectable()
export class MainServiceImpl implements MainService {
constructor(
@Inject(TYPES.PublishSubscriptionService) private publishSubscriptionService: PublishSubscriptionService,
@Inject(TYPES.MainDao) private mainDao: MainDao
) {}
现在如果我改变顺序,它总是第二个注入的服务得到错误。
TYPES 是 Symbols
的对象const TYPES = {
PublishSubscriptionService: Symbol('PublishSubscriptionService'),
MainDao: Symbol('MainDao'),
};
export default TYPES;
这里是 index.ts,它正在使用桶装
// start:ng42.barrel
export * from './main.dao.mongo-impl';
export * from './main.dao';
export * from './main';
export * from './main.schema';
export * from './main.service.impl';
export * from './main.service';
// end:ng42.barrel
我错过了什么?
Closed NestJS issue with no resolution
NestJS doc on @Global modules
我不知道 TYPES 是什么,你可以使用@Inject(PublishSubscriptionService) 或者你可以简单地使用:
constructor(
private publishSubscriptionService: PublishSubscriptionService,
private mainDao: MainDao
) {}
如果没有看到你的 MainServieImplModule
或调用包含此服务的任何模块,我不能肯定地说,但如果我不得不猜测,你没有向 Nest 声明你的 providers
正确地用于这两个服务。您需要像这样创建自定义提供程序
@Module({
provides: [
{
provide: TYPES.PublishSubscriptionService,
useClass: PublishSubscriptionService,
},
{
provide: TYPES.MainDao,
useClass: MainDao
},
MainServiceImpl
]
})
export class MainServiceImplModule {}
但是,如果这些提供程序是不同模块的一部分,您将需要确保提供程序是自定义的(如上所述),但也已导出,以便可以在不同的模块中导入和使用它们。没有看到更多你的代码,这个问题是不可能回答的,但我认为这应该给你你需要的方向。如果不是,请编辑您的问题并添加更多信息。