我们正在使用Angular构建一个由cms驱动的应用程序框架。我们提供了多个软件包,客户可以使用它们进一步定制ui或逻辑。出于这个原因,组件会将其逻辑委托给服务,预期的客户可以提供定制服务(我们避免了组件继承)。
将动态放置组件,并使用保持CMS数据的唯一数据集进行初始化。提供的服务将从组件注入器继承此数据。这很好用,但是,当提供自定义服务(使用InjectionToken
)时,我们会遇到2个问题:
还有其他人遇到过类似的架构挑战吗?
答案 0 :(得分:0)
看起来像您想要的不是直接提供者。似乎您想要的是一家工厂,它将成为实际的提供者,然后它将具有一个create方法,该方法将为您返回不是单例的实际服务的实例。
类似
@Injectable()
export class MyPFactory {
public create(): MyP {
return new MyP();
}
}
通过这种方式,您可以获得可重复使用的服务,而不必全神贯注地进行单元测试,而且单元测试可能更清洁。我不会说这是严格的解决方案,只是我多次使用它来解决您的问题的方式。
通过这种方式,MyP不需要装饰为Injectable,因为工厂将通过在要使用它的组件/指令中调用create方法来创建MyP。