Criei uma api que usa o Refit para acessar outras apis. O refit precisa da conficuração dos endpoinst por meio de uma interface, que nao é imprementada por nemuma outra classe. Tentei criar uma Dll que abstrai isso, expondo uma classe que recebe as interfaces por injessão de dependencia. Ao compilar nao ocorrem erros, porem, ao importar a dll para uma outra api, e executar os endpoints recebo esse erro:
System.InvalidOperationException: Unable to resolve service for type 'PolgoApi.DataAcess.Interfaces.IloginData' while attempting to activate 'PolgoApi.Controllers.LoginController'. at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired) at lambda_method9(Closure , IServiceProvider , Object[] ) at Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider.<>c__DisplayClass7_0.b__0(ControllerContext controllerContext) at Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.<>c__DisplayClass6_0.g__CreateController|0(ControllerContext controllerContext)
Meu program (Api que importa a Dll):
`using PolgoApi.DataAcess.Interfaces;
var builder = WebApplication.CreateBuilder(args); // Add services to the container.
builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); }
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Exemplo da interface:
using PolgoApi.DTO;
using PolgoApi.Model;
using Refit;
namespace PolgoApi.DataAcess.Interfaces { public interface IChanceData { [Post("/{request.anoCampanha}/{requestQuery.identicicacaoCampanha}/{requestQuery.totalPorPagina}/{requestQuery.paginaAtual}")] Task GetChances([Header("Authorization")] string token, ChancesRequest requestQuery); } }`
Controller da Api que recebeu a Dll:
`using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using PolgoApi.DataAcess.Interfaces; using PolgoApi.DTO; using Refit;
namespace PolgoApi.Controllers { [Route("api/[controller]")] [ApiController] public class LoginController : ControllerBase { private readonly IloginData loginData; public LoginController(IloginData loginData) { this.loginData = loginData; }
[HttpPost]
[Route("autenticacao")]
public async Task<IActionResult> Autenticacao(AutenticationRequest request)
{
var result = await _loginData.Autentication(request).ConfigureAwait(false);
if (result == null)
return NotFound();
return Ok(result);
}
[HttpPost]
[Route("cadastro")]
public async Task<IActionResult> Cadastro(CadastroRequest request)
{
var result = await _loginData.Cadastro(request).ConfigureAwait(false);
if (result == null)
return NotFound();
return Ok(result);
}
}
} ` As Dll suportam a injeção de dependencias? Se sim, como posso encapsular essas interfaces, de forma que as aplicações que recebem a Dll não precisem conhece-las?