@Input
在属性中注入“服务”依赖项是一种好习惯吗?此上下文中的服务不是在根级别管理的单例实例,而是接口的不同实现的多个实例。
考虑以下示例:在 Angular 库中,ShapeComponent 依赖于 ShapeService(接口)。
零件
@Component({
selector: 'ex-shape',
templateUrl: '..',
})
export class ShapeComponent {
constructor(shapeServiceCtor: ShapeService)
@Input shapeServiceInput: ShapeService;
}
解决依赖关系的一种简单方法是设置输入属性,如下面的代码所示。
<ex-shape [shapeServiceInput]="rectangleShapeService" />
<ex-shape [shapeServiceInput]="ellipseShapeService" />
<ex-shape [shapeServiceInput]="polygonShapeService" />
上述方法是否适用于解决组件中的依赖关系?
如果使用输入属性方法,那么服务/依赖项必须以相同的方式传播到子组件。这种方法的缺点是父组件必须接受所有依赖项作为输入属性。
是否有任何推荐的方法来在库级别注入和作用域依赖项?