我有一个基于组件继承的体系结构 基类提供了许多有用的方法和属性 其中某些功能需要引用服务 如果我在构造函数上使用DI,那么我最终需要将许多(10+)参数传递给我制作的每个组件上的基类。 为了避免这种情况,我有一个名为ServiceBag的服务,其中已注入了所有服务,并将其注入了所有组件-这样,我只需要将一个变量传递给super()即可。
默认情况下,将为此ServiceBag创建一个单例,然后将其传递给所有组件。只要内部的所有服务也是单例并且实例化一次,就可以。
我现在遇到的情况是,它们中的一些作用域仅限于该组件,因此,如果我只有1个ServiceBag实例,则显然无法正常工作。
底线- 我想在我的组件树的任何级别上为每个组件实例创建一个新的ServiceBag实例。我可以将其放在提供程序中:我拥有的每个组件的[ServiceBagService],并且可以工作-但对我而言这没有意义-必须有更好的方法来实现。自定义注入器,装饰器或类似的东西,将导致它每次创建一个新实例
此方法与根级别提供的服务配合使用。
答案 0 :(得分:0)
我通过扩展@Component装饰器解决了它:
import { Component } from '@angular/core';
import { ServiceBagService } from './ServiceBag';
/*
* The decorator causes the ServiceBag to instanciate every time a new component is created
* It should be used on all components that inherit from ComponentBase to provide the correct ServiceBag instance to the component
*/
function ComponentEx(args: any = {}): (cls: any) => any
{
args.providers = [ServiceBagService];
return Component(args);
}
export default ComponentEx;