4
respostas

Sobre a instancia dos serviços na Startup

Boa tarde. Sempre instanciei os serviços assim:

services.AddScoped<FilmeService>();

Qual a diferença de colocar da forma que você fez passando duas vezes o mesmo serviço?:

services.AddScoped<FilmeService, FilmeService>();
4 respostas

Boa noite, Karolina. Você viu duas classes mesmo? Informamos a interface no primeiro tipo:

services.AddScoped<IFilmeService, FilmeService>();

Basicamente estamos informação ao container de injeção de dependência que todas vez que uma interface IFilmeService foi utilizada, utilizar a instância da classe FilmeService.

Bom dia. Em nenhum momento no curso fizemos o padrão de criar interfaces. Se você acessar o link da aula no github vai ver que está sendo definido o serviço duas vezes: Insira aqui a descrição dessa imagem para ajudar na acessibilidadeLink : https://github.com/alura-cursos/alura-csharp-4-projeto/blob/Aula-3/UsuariosApi/Startup.cs

Bom dia... estranho. Talvez tenham esquecido de usar a interface. Veja o exemplo nos docs do ASP.Net: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-6.0

"The sample app registers the IMyDependency service with the concrete type MyDependency. The AddScoped method registers the service with a scoped lifetime, the lifetime of a single request."

using DependencyInjectionSample.Interfaces;
using DependencyInjectionSample.Services;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

builder.Services.AddScoped<IMyDependency, MyDependency>();

var app = builder.Build();

Boa tarde,

Isso está relacionado com desacoplamento de serviços, usamos interface para tornar a aplicação o mais flexível possível na hora de fazer uma injeção (programação orientada a interface). Exemplo: se tivéssemos diversas classes que em seu escopo existisse uma referência de uma classe concreta, quando está fosse substituída por outra classe, quebraríamos o código em diversos lugares, usando a interface tornamos a escalabilidade do código bem maior e de fácil manutenção.

Creio que como o objetivo da aula não é sobre injeção de dependência, desacoplamento e escalabilidade de código, o instrutor não entrou nesses assunto.

Aliás, respondendo a pergunta, tenta imaginar: services.AddScoped<Classe, Classe> como Classe classe = new Classe( ); ou services.AddScoped<IClasse, Classe> como IClasse classe = new Classe( );

Para saber mais: https://imasters.com.br/framework/os-conceitos-da-injecao-de-dependencia-no-ambiente-net-core