gpt4 book ai didi

angular - 如何使用 Injector 而不是单例获取类的新实例

转载 作者:行者123 更新时间:2023-12-04 16:07:32 26 4
gpt4 key购买 nike

我的 Angular 应用程序中有两个可注入(inject)类

@Injectable()
class B {}

@Injectable()
class A {
constructor(b:B) { }
}

我希望 A 类是单例,B 类是 transient

我知道我可以在 A 类中使用 ReflectiveInjector.resolveAndCreate 来获取 B 类的实例。有更好的方法来实现这一点吗?

最佳答案

由于提供者的所有现有配方都创建单例,甚至工厂,您可以创建自己的注入(inject)器,从组件注入(inject)器继承所有提供者并使用 resolveAndInstantiate每次获取新实例的方法:

import { Component, Inject, Injector, ReflectiveInjector } from '@angular/core';

class P {
}

const ps = [];

class C {
constructor(@Inject(P) p) {
ps.push(p);
}
}

@Component({
moduleId: module.id,
selector: 'my-app',
templateUrl: 'app.component.html',
styleUrls: ['app.component.css']
})
export class AppComponent {
name = 'Angular';

constructor(injector: Injector) {
const parent = ReflectiveInjector.resolveAndCreate([P], injector);
const child = parent.resolveAndCreateChild([C]);
const c1 = child.resolveAndInstantiate(C);
const c2 = child.resolveAndInstantiate(C);
console.log(c1 === c2); // false

console.log(ps[0] === ps[1]); // true

}
}

Here is the demo .

还请记住,@5.x.x 中已弃用 ReflectiveInjector。似乎在新的StaticInjector 中没有其他选择。 .我举报了an issue关于那个。

关于angular - 如何使用 Injector 而不是单例获取类的新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45951627/

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