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>();
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>();
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: Link : 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