【问题标题】:Is a not injectable service still a service or is it better to use something different?不可注入的服务仍然是服务还是使用不同的东西更好?
【发布时间】:2020-02-26 21:18:44
【问题描述】:

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

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

嗯,我用一个非常标准的可注入服务尝试了这个。

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

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

我找到了一些解决方案: - 创建某种工厂 - 使服务不可注入并且不提供它。所以它将像标准类一样处理,每次我使用它时,我都必须创建这个类的一个实例(新的 ExportCsv) - 只是不要把它称为服务,基本上和“不可注入”服务一样

对于我的问题是否有某种最佳实践? 不通过提供者提供且不可注入的服务真的仍然是服务吗?

【问题讨论】:

    标签: angular typescript angular2-services


    【解决方案1】:

    通常“服务”一词的意思是“提供某些东西”。就像从数据库中提供数据一样,提供与用户相关的东西,甚至提供更改数据的方法都可以视为服务。您的问题是 DI 服务的静态实例将始终保留您之前提供给它的数据。

    所以从技术上讲,如果您有可能将数据保存在一个集合中,如 Map 而不是服务类本身,那么您可以提供一个可注入服务,该服务包含一个带有给定键的映射,该键将保存您的 csv 数据.

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

    所以它会像标准类一样被处理,每次我使用它时我都必须创建这个类的一个实例(新的 ExportCsv)

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

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      • 1970-01-01
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      • 2012-03-31
      • 1970-01-01
      相关资源
      最近更新 更多