Por que conseguimos acessar o "DAL<PessoaComAcesso>"
mesmo sem ter registrado ele no Program.cs da API?
Por que conseguimos acessar o "DAL<PessoaComAcesso>"
mesmo sem ter registrado ele no Program.cs da API?
Olá, Igor! Tudo joia?
A sua dúvida sobre conseguir acessar o DAL<PessoaComAcesso>
mesmo sem registrá-lo no Program.cs
pode estar relacionada ao uso de injeção de dependência e ao padrão de projeto que você está utilizando.
Em muitos projetos ASP.NET, a injeção de dependência é configurada para resolver automaticamente tipos genéricos, como DAL<T>
, desde que o tipo base (neste caso, DAL
) esteja registrado. Isso significa que, se você registrou o tipo base DAL
no contêiner de serviços, o ASP.NET pode resolver automaticamente DAL<PessoaComAcesso>
quando necessário, sem precisar registrá-lo explicitamente.
Por exemplo, se você tem algo como:
services.AddScoped(typeof(DAL<>), typeof(DAL<>));
Isso permite que qualquer tipo DAL<T>
seja resolvido automaticamente, incluindo DAL<PessoaComAcesso>
, desde que PessoaComAcesso
seja um tipo válido no seu projeto.
Se esse não for o caso, pode ser que exista alguma configuração específica ou convenção no seu projeto que esteja permitindo essa resolução automática. Vale a pena verificar como o contêiner de injeção de dependência está configurado no seu projeto.
Espero ter ajudado e bons estudos!
Eu dei uma olhada no meu programa, acho que seria isso mesmo.
O que eu tenho registrado até em tão são os filhos.
builder.Services.AddTransient<DAL<AvaliacaoArtista>>();
builder.Services.AddTransient<DAL<Artista>>();
builder.Services.AddTransient<DAL<Musica>>();
builder.Services.AddTransient<DAL<Genero>>();
Eu consigo até ver o Dal e mandar o tipo PessoaComAcesso para ele, mas ele me devolve um erro 500. Agora eu entendi o que estava acontecendo, ele deixa você criar um método com ele, mas só vai funcionar de fado se ele tiver registrado. Acho que se eu colocar assim como você sugeriu, ele vai por ser uma forma mais genérica.
Mas para manter o padrão, eu registrei ele builder.Services.AddTransient<DAL<PessoaComAcesso>>()
no meu programa e foi de boas.