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>();
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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