Вы должны исходить из возможностей фреймворка, а фреймворк не предлагает ничего подобного. Если может быть более одного вида GridApiService <T> для одного инжектора, вам придется либо создать его подкласс, либо внедрить фабричную функцию или класс-оболочку, для которого создается аргумент T. Это потенциальная проблема XY, и предпочтительное решение может отличаться от того, что вы пытаетесь сделать. И AOT тоже наложит некоторые ограничения.
я есть декорированный модельный класс:
@Api('payments/deposit')
export class DepositsModel {
public id: number;
public created_at: Date;
...
В конструкторе угловых компонентов я внедряю сервис данных, указывающий на использование моего класса модели:
...
public constructor(
private $api: GridApiService<DepositsModel>
...
) {
this.service = new GridService($api);
...
}
...
Итак, у моего классного компонента есть классный сервис, ведьма знает тип данных, с которыми он работает ...
Должен знать..
Но как я могу получить метаданные моей модели в моем GridApiService? Я пробовал:
@Injectable()
export class GridApiService<T>{
constructor(
$http: HttpClient,
) {
let api = Reflect.getMetadata('Api', T);
}
И получилСообщение об ошибке: «T» относится только к типу, но здесь используется в качестве значения.
ОБНОВИТЬ
Можете ли вы посоветовать мне другой способ передачи данных инициализации в мой GridApiService, который должен вводиться через DI, а не создаваться с новым ключевым словом?