为了注入提供者,组件必须属于context(基本上是一个模块)在嵌套应用程序中,基本上它必须是或可注射, 控制器, 异步提供者 or a 自定义异步提供者,并且它必须属于一个模块,在该模块中它可以访问您尝试注入的提供程序。为了在不在上下文中的外部 javascript 类中使用服务的功能,您可以导入该服务,并且必须自己实例化它,这里您可以看到这种方法的示例:
class SampleClass {
private memberService: MemberService;
constructor() {
this.memberService = new MemberService();
}
}
请记住,这是服务的另一个实例,如果您不小心,您将在运行时拥有多个实例,因为它不再是可注入的,而是一个类对象。为了防止这种情况,也许你可以创建一个单例包含所有 MemberService 功能并将其导入到 MemberService 和 SampleClass 中:
export class MemberFunctionality {
private static memberFunctionality: MemberFunctionality;
private constructor() {}
static getInstance(): MemberFunctionality {
if(!memberFunctionality) {
this.memberFunctionality = new MemberFunctionality();
}
return this.memberFunctionality;
}
login() {}
}
然后将其导入到 MemberService 和 SampleClass 上并调用 getInstance 方法
import { MemberFunctionality } from './member-functionality.ts';
class SampleClass {
private memberFunctionality: MemberFunctionality;
constructor() {
this.memberFunctionality = MemberFunctionality.getInstance();
}
...
}
会员服务也是如此
import { MemberFunctionality } from './member-functionality.ts';
@Injectable()
export class MemberService {
private memberFunctionality: MemberFunctionality;
constructor(@Inject(Constants.RelationshipMemberModel) private readonly relationshipMemberModel: typeof Model) {
this.memberFunctionality = MemberFunctionality.getInstance();
}
login () {
return this.memberFunctionality.login();
}
}
这样就可以只拥有该功能的一个实例