#angular #typescript
#angular #typescript
Вопрос:
У меня есть функция фабрики декораторов:
export function CustomDecorator (dummyProp: string) {
return function<T extends {new (...args: any[]): any}> (ctor: T) {
@Injectable()
class MyCustomClass extends ctor {
myProp = dummyProp;
constructor(..._: any[]) {
super(_);
}
}
return MyCustomClass;
}
}
Затем у меня есть сервис, который я хочу сделать инъекционным, а также украшенным вышеуказанной функцией:
@Injectable()
@CustomDecorator('helloWorld')
export class MyService {
/* ... */
}
Однако это не работает, и я получаю следующую ошибку:
Нет поставщика для MyCustomClass!
Как мне заставить это работать?
Комментарии:
1. Если это еще не сделано, вам, вероятно, необходимо предоставить MyCustomClass (хотя это и service) в массиве provide модуля MyService
2. Вы не можете этого сделать, поскольку MyCustomClass создается во время выполнения.
Ответ №1:
Мне удалось заставить это работать, просто указав использование фабрики сервисов:
@NgModule({
...
providers: [
{provide: MyService, useFactory: () => new MyService()}
]
})