如何清除提供者缓存以与 Angular 7 中的 useFactory 一起使用

jsg*_*pil 5 dependency-injection angular angular7

我正在动态创建元素,其中一个元素使用@Inject解析为工厂的令牌。

问题在于工厂实例缓存在节点索引上。一旦我的元素从视图中消失并返回,我希望能够调用我的工厂函数;但我不。相反,我得到了这个工厂实例的缓存版本。

在此输入图像描述

如何确保对象从视图中消失后不使用缓存?

基本上,当我的@Component构造函数被调用时,我期望一个全新的服务。不是缓存服务。

@Inject(FORM_GROUP_MANAGER_SERVICE)
private formGroupManagerService: FormGroupManagerServiceImpl
Run Code Online (Sandbox Code Playgroud)
{
    provide: FORM_GROUP_MANAGER_SERVICE,
    useFactory: (structureControlService, createTonicControlFactory, parent) => new FormGroupManagerService(
        structureControlService,
        createTonicControlFactory,
        parent
    ),
    deps: [StructureControlService, FORM_GROUP_MANAGER_SERVICE_CREATE_CONTROL, [new Optional(), FormGroupManagerService]]
},
Run Code Online (Sandbox Code Playgroud)

Jot*_*edo 4

在 Angular repo 中确实有一个功能请求,但现在我可以想到两种方法:

  • 直接注入工厂方法而不是它的解析实例。这样,它的客户端就可以自行解析实例,从而使其对解析对象的生命周期负责。

  • 本次闪电战所示,在指令/组件级别注册工厂提供者