Interface Angular 2 injetável?
Hoje me deparei com algo que não achei que me causaria problemas.
Em Java e Spring, posso declarar dois beans que implementam uma determinada interface, enquanto em outra classe em que são injetados, só trabalho com a interface; é de fato o que eu amo com a IoC: você realmente não precisa saber com qual objeto está trabalhando, apenastipo.
Então, no meu pequeno programa Angular2 / Typescript, eu estava tentando fazer o mesmo:
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 os módulos estão usando um provedor diferente:TnsConfigurationService
ouWebAppConfigurationService
.
No entanto, esses dois@Injectable
serviços implementam a mesma interface:
configuration.interface:
export interface IConfigurationService {
...
}
Finalmente, em um dos meus componentes, eu uso o injetável fornecido por um desses módulos que mostrei no começo:
import { IConfigurationService } from './configuration.interface';
export class HeroesService {
constructor(private configurationService: IConfigurationService) { }
}
Minha expectativa era que esse último componente fosse injetado com o serviço correto, mesmo que o parâmetro esteja apenas definindo explicitamente a interface. Obviamente, recebo um erro ("Erro: não é possível resolver todos os parâmetros do HeroesService")
Agora, não espero uma solução fácil para isso, pois parece uma falta de arquitetura. Mas talvez alguém possa me indicar um design alternativo?