7
respostas

Definição do escopo da injeção de dependência

Boa tarde a todos,

Fiquei com uma dúvida. No curso é criado o "CoreModule" com os serviços de escopo "Global". E para isso foi utilizado dessa maneira:

@Injectable({providedIn: 'root'})
export class AuthService {  

Porém este serviço está atrelado ao "CoreModule", o ideal e/ou boa prática não seria fazer dessa maneira abaixo?

@Injectable()
export class AuthService {  

e Dentro do CoreModule colocar o AuthService dentro do Providers?

providers: [AuthService]

Daria o mesmo efeito?

abs

7 respostas

Fala aí Bruno, tudo bem? Bom, geralmente os serviços no Angular a gente deixa como global, @Injectable({providedIn: 'root'}) assim como você disse.

Apenas não deixamos algo global que temos certeza e queremos que ninguém mais tenha acesso.

Mas, isso vai depender muito de cada projeto, situação e cenário.

O comum é ser global.

Espero ter ajudado.

Boa noite, Bruno! Como vai?

Apenas como forma de acrescentar um pouco mais de informação ao que o Matheus já te falou, para dar um mergulho maior nesse assunto, eu te indicaria fortemente dar uma olhada na seção de injeção de dependência da documentação do Angular! A documentação é muito boa e vai te dar várias informações importantes sobre esse assunto!

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Boa noite Matheus e Gabriel, tudo bem?

Obrigado pela resposta de vocês, porém não é a resposta correta. A minha dúvida não é como funciona a injeção de dependência.

A ideia do CoreModule é deixar os serviços entre outras coisas que precisam ter uma única instancia e que seja compartilhado na aplicação toda. A classe AuthService pertence ao "CoreModule", neste sentido reformulo a minha pergunta: Não faria mais sentido o AuthService ao invés de ter o "@Injectable({providedIn: 'root'}) ele ser declarado no "Providers" do CoreModule? Já que esse modulo será importado dentro do AppModule? Teria o mesmo efeito?

abs

Boa noite,

Alguém consegue me tirar essa dúvida? rsrss

abs

Fala aí Bruno, tudo bem? Bom, se você importá-lo dentro do AppModule e não do CoreModule quando for utilizá-lo irá dar problemas.

Pois será um provider do módulo AppModule e não do CoreModule (mesmo importando o CoreModule).

Os providers não são herdados entre módulos assim.

Por isso que normalmente deixamos como providedIn: root, dessa maneira, onde você precisar utilizá-lo, basta injetá-lo.

Espero ter ajudado.

Olá Matheus,

Obrigado pela resposta. No caso eu adicionei os serviços globais dentro do providers do "CoreModule" e depois adicionei o CoreModule dentro do AppModule e funcionou perfeitamente :)

Fiz o teste usando o "provided:root" e outro teste apenas adicionando dentro do providers do CoreModule e deu o mesmo resultado.

Obrigado.

Boa Bruno, fico feliz que tenha dado certo.

Caso o problema tenha sido resolvido, não deixe de marcar a dúvida como solucionada para que possa ajudar outros alunos com o mesmo ou problema parecido.

Abraços e bons estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software