Когда поставщик с токеном NG_VALIDATORS используется в директиве пользовательского валидатора?

#angular #dependency-injection #directive

Вопрос:

В документации говорится: «Angular признает роль директивы в процессе проверки, поскольку директива регистрируется у поставщика NG_VALIDATORS».

 @Directive({
  selector: '[appForbiddenName]',
  providers: [{provide: NG_VALIDATORS, useExisting: ForbiddenValidatorDirective, multi: true}]
})
export class ForbiddenValidatorDirective implements Validator {
  @Input('appForbiddenName') forbiddenName = '';

  validate(control: AbstractControl): ValidationErrors | null {
    return this.forbiddenName ? forbiddenNameValidator(new RegExp(this.forbiddenName, 'i'))(control)
                              : null;
  }
}
 

Как я понял механизм DI, поле «поставщики» в метаданных @Directive-это место, где директива выглядит, если ее код ссылается на соответствующий инъекционный токен.

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

Таким образом, возникает вопрос — где и когда наша директива использует поставщика и как директива FormControl знает о нашей пользовательской функции проверки?