gpt4 book ai didi

javascript - Angular 2 依赖注入(inject) : Inject multiple instances

转载 作者:行者123 更新时间:2023-11-30 00:07:29 25 4
gpt4 key购买 nike

我有一个“消息”可注入(inject)对象,代表可以获取用户消息的服务。此类依赖于使用用户凭据登录到后端的“数据库”类。

现在想写一个2个用户同时登录的测试用例,自动测试用户1发送的消息是否直接到达用户2的收件箱。

因此,我需要一种方法来将两个不同的“消息”实例与两个不同的对应“数据库”实例注入(inject)。

我尝试了以下方法:

  beforeEachProviders(() => [
Messages, Database
]);

beforeEach(inject([Messages], (msg) => {
this.msg1 = msg;
}));

beforeEach(inject([Messages], (msg) => {
this.msg2 = msg;
}));

然而,事实证明,msg1 和 msg2 代表“消息”的同一个实例:

it('testcase', () => {
// this.msg1 == this.msg2;
});

是否可以告诉注入(inject)器创建“消息”及其依赖项的不同实例?

最佳答案

这就是 Angular DI 的工作原理。对于单个提供者,您总是获得相同的实例。

作为解决方法,您可以注入(inject) Injector 并使用

var child = ReflectiveInjector.fromResolvedProviders(
ResolvedReflectiveProvider([Message, Database]), injector);
var msg2 = child.get(Message);

这样你应该得到一个不同的 MessageDatabase 实例,而其他提供者从父注入(inject)器中重用(比如 MockBackend,. ..)`

你也可以使用

var injector = ReflectiveInjector.resolveAndCreate([Message, Database]);
var msg2 = child.get(Message);

但是这样你需要提供所有的依赖,不仅仅是MessageDatabase,因为没有parent。

关于javascript - Angular 2 依赖注入(inject) : Inject multiple instances,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37944394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com