Angular 2 interfaz inyectable?

Hoy me topé con algo que no pensé que me causaría problemas.

En Java y Spring, puedo declarar dos beans que implementan una interfaz determinada, mientras que en otra clase donde se inyectan solo trabajo con la interfaz; De hecho, esto es lo que me encanta con IoC: realmente no tienes que saber con qué objeto estás trabajando, solo que estipo.

Entonces, en mi pequeño programa Angular2 / Typecript, estaba tratando de hacer lo mismo:

webapp.module.ts:

... 
import { WebAppConfigurationService } from './app/services/webapp.configuration.service';

@NgModule({
  ...
  providers: [WebAppConfigurationService]
})
export class AppModule { }

tnsapp.module.ts:

...
import { TnsConfigurationService } from './services/tns.configuration.service';

@NgModule({
   ...
   providers: [TnsConfigurationService]
})
export class AppModule { }

Ambos módulos están utilizando un proveedor diferente:TnsConfigurationService oWebAppConfigurationService.

Sin embargo, estos dos@Injectable Los servicios implementan la misma interfaz:

configuración.interfaz:

export interface IConfigurationService {
    ...
}

Finalmente, en uno de mis componentes, uso el inyectable provisto por uno de estos módulos que le mostré al principio:

import { IConfigurationService } from './configuration.interface';

export class HeroesService {

    constructor(private configurationService: IConfigurationService) { }
}

Mi expectativa era que este último componente se inyectara con el servicio correcto, a pesar de que el parámetro solo define explícitamente la interfaz. Por supuesto, recibo un error ("Error: No se pueden resolver todos los parámetros para HeroesService")

Ahora, no espero una solución fácil para esto, ya que suena como una falta arquitectónica. ¿Pero tal vez alguien pueda señalarme un diseño alternativo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta