【发布时间】:2019-03-20 16:26:28
【问题描述】:
我们正在使用 Angular 构建一个 cms 驱动的应用程序框架。我们提供多个包,客户可以使用这些包来进一步定制用户界面或逻辑。出于这个原因,组件会将其逻辑委托给服务,以便客户可以提供自定义服务(我们正在避免组件继承)。
组件是动态放置的,并使用唯一的数据集进行初始化,保存 CMS 数据。提供的服务将从组件注入器继承此数据。这很好用,但是,当提供自定义服务时(使用InjectionToken),我们面临两个问题:
- 服务不再是非单例的,多个组件实例将提供同一个自定义服务
- 服务将不再从组件中继承数据值,因为它被注入到不同的作用域中
还有其他人遇到过类似的架构挑战吗?
【问题讨论】:
-
@Component 装饰器有一个
provider属性:从那里提供服务会在每个新组件实例上创建一个新实例。你试过了吗? -
这正是我们正在做的。然而,我们需要能够通过自定义服务覆盖标准服务。这可以通过工厂实现,但是它们提供在不同的喷射器范围内,这导致了我描述的两个问题。
-
如果服务只需要在相关组件中,你为什么要让它们可注入?只需创建一个类,然后在您的服务中创建一个新实例。这样,您就可以摆脱注入令牌、提供程序、依赖注入以及所有您似乎不需要的 Angular 上下文。
-
请注意:“有意向的客户可以提供定制服务”。我们在 npmjs 上的库中发布组件,客户需要提供自己的逻辑。
标签: angular angular-components angular-dependency-injection