Validador asíncrono controlado por plantilla Angular2

Tengo un problema con la definición de validador asincrónico en forma de plantilla.

Actualmente tengo esta entrada:

<input type="text" ngControl="email"  [(ngModel)]="model.applicant.contact.email" #email="ngForm" required asyncEmailValidator>

con selector de validaciónasyncEmailValidator que apunta a esta clase:

import {provide} from "angular2/core";
import {Directive} from "angular2/core";
import {NG_VALIDATORS} from "angular2/common";
import {Validator} from "angular2/common";
import {Control} from "angular2/common";
import {AccountService} from "../services/account.service";

@Directive({
selector: '[asyncEmailValidator]',
providers: [provide(NG_VALIDATORS, {useExisting: EmailValidator, multi: true}), AccountService]
})

export class EmailValidator implements Validator {
//https://angular.io/docs/ts/latest/api/common/Validator-interface.html


constructor(private accountService:AccountService) {
}

validate(c:Control):{[key: string]: any} {
    let EMAIL_REGEXP = /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i;

    if (!EMAIL_REGEXP.test(c.value)) {
        return {validateEmail: {valid: false}};
    }

    return null;

    /*return new Promise(resolve =>
        this.accountService.getUserNames(c.value).subscribe(res => {
            if (res == true) {
                resolve(null);
            }
            else {
                resolve({validateEmailTaken: {valid: false}});
            }
        }));*/
}

}

La parte de regex de correo electrónico funciona como se esperaba y el formulario se valida con éxito si la expresión regular coincide. Pero después de eso quiero verificar si el correo electrónico no está en uso, por lo que estoy creando una promesa para mi servicio de cuenta. Pero esto no funciona en absoluto y la forma está en estado fallido todo el tiempo.

He leído acerca de los formularios basados en modelos y el uso de FormBuilder como se muestra a continuación:

constructor(builder: FormBuilder) {
this.email = new Control('',
  Validators.compose([Validators.required, CustomValidators.emailFormat]), CustomValidators.duplicated
);
}

Que tienen validadores asíncronos definidos en el tercer parámetro deControlar() Pero este no es mi caso porque estoy usando un enfoque diferente.

Entonces, mi pregunta es: ¿es posible crear un validador asíncrono usando formularios basados en plantillas?

Respuestas a la pregunta(3)

Su respuesta a la pregunta