Не является ли инъекционный сервис все еще сервисом или лучше использовать что-то другое? - PullRequest
0 голосов
/ 31 октября 2019

Я нашел так много разных ответов на эту проблему, и я всегда ищу лучшие практики.

Я создал службу, для которой мне нужно несколько экземпляров. Эта служба принимает некоторые данные в качестве входных данных и создает из них csv.

Ну, я попробовал это с очень стандартной инъекционной службой.

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

Проблема в том, что если я предоставлю этов моем компоненте данные, очевидно, не сбрасываются и в основном просто добавляются, поскольку существует только один экземпляр моего сервиса. Итак, если этот компонент создает несколько CSV, каждый CSV будет иметь некоторые данные, которых там быть не должно.

Я нашел несколько решений: - Создать какую-то фабрику - Сделать сервис не инъекционным и не предоставлятьЭто. Таким образом, он будет обрабатываться как стандартный класс, и каждый раз, когда я его использую, мне приходится создавать экземпляр этого класса (новый ExportCsv) - просто не называйте это сервисом и делайте с ним то же самое, что и с «не инъецируемым»"service

Есть ли какая-то лучшая практика для моей проблемы? Является ли услуга, которая не будет предоставляться через провайдеров и не подлежит инъекции, на самом деле все еще услуга?

1 Ответ

0 голосов
/ 31 октября 2019

Обычно термин «Сервис» означает «обслуживать что-то». Как и обслуживание данных из БД, обслуживание связанных с Пользователем вещей или даже предоставленные методы изменения данных можно рассматривать как Сервис. Проблема в вашем случае заключается в том, что статический экземпляр службы DI всегда будет содержать данные, которые вы ему ранее предоставили.

С технической точки зрения, если у вас есть возможность хранить данные в коллекциикак Карта вместо самого Класса обслуживания, тогда вы могли бы предоставить инъекционный сервис, который содержит карту с данными ключами, которая будет содержать данные ваших csvs.

Если это не так, то я бы предложилцитата из вашего поста выше для примера лучшей практики:

Так что он будет обрабатываться как стандартный класс, и каждый раз, когда я его использую, я должен создать экземпляр этого класса (новый ExportCsv)

Таким образом, вы можете либо создать коллекцию, либо создать новый класс для этой функции и сохранить объект в коллекции внутри вашей службы инъекций.

С уважением

...