不可注射的服务仍然是一项服务,还是使用其他某种服务更好?

时间:2019-10-31 13:39:45

标签: angular typescript angular2-services

对于这个问题,我找到了很多不同的答案,而且我一直在寻找最佳实践。

我创建了需要多个实例的服务。该服务将一些数据作为输入,并根据它创建一个csv。

好吧,我通过非常标准的可注射服务对此进行了尝试。

@Injectable
export class ExportCsv {
  public constructor(Data: any) {
    // Do something and spit out csv
  }
}

问题是,如果我在组件中提供此数据,则显然不会重置数据,而基本上只是附加数据,因为只有一个服务实例。因此,如果此组件创建了多个csv,则每个csv都会有一些不应该存在的数据。

我找到了一些解决方案: -建立某种工厂 -使服务不可注射并且不提供。因此,它将像标准类一样进行处理,每次使用它时,我都必须创建该类的实例(新的ExportCsv) -只是不要将其称为服务,并且基本上与“不可注射”服务一样使用它

我的问题是否有某种最佳实践? 不会通过提供者提供并且不能注射的服务真的仍然是一项服务吗?

1 个答案:

答案 0 :(得分:0)

通常,术语“服务”是指“服务某事”。就像从DB提供数据一样,服务与用户相关的东西甚至是提供的更改数据的方法都可以看作是一种服务。您遇到的问题是DI服务的静态实例将始终保留您先前提供给它的数据。

从技术上讲,如果您可以将数据保留在像Map这样的集合中,而不是在Service Class本身中,那么您可以提供一种可注入服务,该服务持有具有给定键的地图,该键将保存csvs的数据

如果不是这种情况,那么我建议您从上面的帖子中引用最佳实践案例:

  

因此它将像标准类一样处理,每次使用它时,我都必须创建该类的实例(新的ExportCsv)

因此,基本上,您可以为此功能创建一个集合或创建一个新类,然后将对象保存到可注入服务内部的集合中。

致谢