const userRepositoryProvider = {
provide: UserRepository, // abstract class
useClass: ConcreteUserRepository, // concrete class
};
在模块A中,我提供并导出了一个类似上面的提供程序.(全部设置为可注射)
在另一个模块B中,我导入模块A,在模块B的服务中,我注入从模块A导入的提供程序,如下所示:
private readonly userRepo: UserRepository
当我构建和执行应用程序时,Nest没有解析依赖关系,告诉UserRepository是"?".
奇怪的是,当我将提供程序标记设置为字符串时:
const userRepositoryProvider = {
provide: "UserRepository", // abstract class
useClass: ConcreteUserRepository, // concrete class
};
并向提供程序注入如下内容:
@Inject("UserRepository") private readonly userRepo: UserRepository
它的工作完全符合我的预期,没有任何例外.
那么,它为什么会表现成这样呢?是不是有个窃听器?
最后,我提供了这两个抽象和具体的类.但我认为这并不重要,因为字符串提供令牌可以正常工作,而抽象类提供令牌则不能.
@Injectable()
export abstract class UserRepository {
getUser(id: bigint): User {
return User.create(id);
}
}
@Injectable()
export class ConcreteUserRepository extends UserRepository {}
const userRepositoryProvider = {
provide: UserRepository, // abstract class
useClass: ConcreteUserRepository, // concrete class
};
在模块A中,我提供并导出了一个类似上面的提供程序.(全部设置为可注射)
在另一个模块B中,我导入模块A,在模块B的服务中,我注入从模块A导入的提供程序,如下所示:
private readonly userRepo: UserRepository
当我构建和执行应用程序时,Nest没有解析依赖关系,告诉UserRepository是"?".
奇怪的是,当我将提供程序标记设置为字符串时:
const userRepositoryProvider = {
provide: "UserRepository", // abstract class
useClass: ConcreteUserRepository, // concrete class
};
并向提供程序注入如下内容:
@Inject("UserRepository") private readonly userRepo: UserRepository
它的工作完全符合我的预期,没有任何例外.
那么,它为什么会表现成这样呢?是不是有个窃听器?
最后,我提供了这两个抽象和具体的类.但我认为这并不重要,因为字符串提供令牌可以正常工作,而抽象类提供令牌则不能.
@Injectable()
export abstract class UserRepository {
getUser(id: bigint): User {
return User.create(id);
}
}
@Injectable()
export class ConcreteUserRepository extends UserRepository {}