我为这个问题找到了很多不同的答案,我一直在寻找最佳实践。
我创建了需要多个实例的服务。该服务将一些数据作为输入,并根据它创建一个csv。
好吧,我通过非常标准的可注射服务对此进行了尝试。
@Injectable
export class ExportCsv {
public constructor(Data: any) {
// Do something and spit out csv
}
}
问题是,如果我在组件中提供此数据,则显然不会重置数据,而基本上只是附加数据,因为只有一个服务实例。因此,如果此组件创建了多个csv,则每个csv都会有一些不应该存在的数据。
我找到了一些解决方案:-建立某种工厂-使服务不可注射并且不提供。因此,它将像标准类一样进行处理,每次使用它时,我都必须创建该类的实例(新的ExportCsv)-只是不要将其称为服务,并且基本上与“不可注射”服务相同]
我的问题是否有某种最佳实践?不会通过提供者提供并且不能注射的服务真的仍然是一项服务吗?
通常,术语“服务”是指“为某物服务”。与从DB提供数据一样,服务与用户相关的东西甚至是提供的用于更改数据的方法都可以看作是一种服务。您遇到的问题是DI服务的静态实例将始终保留您以前提供给它的数据。
因此,从技术上讲,如果您可以将数据保留在像Map这样的集合中,而不是在服务类本身中,那么您可以提供一种可注入的服务,该服务持有具有给定密钥的地图,该密钥将保存csvs的数据。
如果不是这种情况,那么我建议您引用以上帖子中的最佳实践案例的引用:
所以它将像标准类一样处理,每次使用它时,我都必须创建该类的实例(新的ExportCsv)
因此,基本上,您可以为此功能创建一个集合或创建一个新类,然后将对象保存到可注入服务内部的集合中。
问候