2

我们正在使用 Angular 构建一个 cms 驱动的应用程序框架。我们提供多个包,客户可以使用这些包来进一步定制用户界面或逻辑。出于这个原因,组件会将其逻辑委托给服务,目标客户可以提供自定义服务(我们正在避免组件继承)。

组件是动态放置的,并使用唯一的数据集进行初始化,保存 CMS 数据。提供的服务将从组件注入器继承此数据。这很好用,但是,当提供自定义服务(使用InjectionToken)时,我们面临 2 个问题:

  1. 服务不再是非单例的,多个组件实例将提供同一个自定义服务
  2. 该服务将不再从组件继承数据值,因为它被注入到不同的范围内

还有其他人遇到过类似的架构挑战吗?

4

1 回答 1

0

看起来你想要的不是直接的提供者。似乎您想要的是一个工厂,它将是实际的提供者,然后它将具有一个 create 方法,该方法将为您返回一个不是单例的实际服务的实例。

就像是

@Injectable()
export class MyPFactory {
  public create(): MyP {
    return new MyP();
  }
}

通过这种方式,您可以获得一个可重用的服务,而无需考虑压倒一切并且可能更清洁的单元测试。我不会说这严格来说是一个解决方案,只是我多次使用的解决您问题的方法。

通过这种方式,MyP 不需要被装饰为 Injectable,因为工厂将通过在将要使用它的组件/指令中调用 create 方法来创建它。

https://en.wikipedia.org/wiki/Factory_method_pattern

于 2018-10-16T08:09:49.083 回答