No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Creando controladores

20/22
Recursos

Aportes 11

Preguntas 9

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Como recomendación la propiedad del servicio debería ser declarada como protected y de solo lectura de la siguiente forma

protected readonly ITareasService _tareasService;

es un estándar que recomienda .Net

Hola, para quienes al momento de compilar el codigo se les presenta el error:

Unhandled exception. System.AggregateException: Some services are not able to be constructed (Error while validating the service descriptor ‘ServiceType: webapi.Services.ICategoriaService Lifetime: Scoped ImplementationType: webapi.Services.CategoriaService’: Unable to resolve service for type ‘webapi.TareasContext’ while attempting to activate ‘webapi.Services.CategoriaService’.)
—> System.InvalidOperationException: Error while validating the service descriptor ‘ServiceType: webapi.Services.ICategoriaService Lifetime: Scoped ImplementationType: webapi.Services.CategoriaService’: Unable to resolve service for type ‘webapi.TareasContext’ while attempting to activate ‘webapi.Services.CategoriaService’.

No es un error en el codigo en realidad, ya que al momento de seguir las clases siguientes y agregar el codigo que falta este “error” se soluciona. Muy segurmente no funciona por la falta de codigo adicional

CategoriaController

using Microsoft.AspNetCore.Mvc;
using webapi.Models;
using webapi.Services;

namespace webapi.Controllers;

[Route("api/[controller]")]
public class CategoriaController : ControllerBase
{
    ICategoriaService categoriaService;

    public CategoriaController(ICategoriaService service) {
        categoriaService = service;
    }

    [HttpGet]
    public IActionResult Get() {
        return Ok(categoriaService.Get());
    }

    [HttpPost]
    public IActionResult Post([FromBody] Categoria categoria) {
        categoriaService.Save(categoria);
        return Ok();
    }

    [HttpPut("{id}")]
    public IActionResult Put(Guid id, [FromBody] Categoria categoria) {
        categoriaService.Update(id, categoria);
        return Ok();
    }

    [HttpDelete("{id}")]
    public IActionResult Delete(Guid id) {
        categoriaService.Delete(id);
        return Ok();
    }
}

TareaController

using Microsoft.AspNetCore.Mvc;
using webapi.Models;
using webapi.Services;

namespace webapi.Controllers;

[Route("api/[controller]")]
public class TareaController : ControllerBase
{
    ITareaService tareaService;

    public TareaController(ITareaService service) {
        tareaService = service;
    }

    [HttpGet]
    public IActionResult Get() {
        return Ok(tareaService.Get());
    }

    [HttpPost]
    public IActionResult Post([FromBody] Tarea tarea) {
        tareaService.Save(tarea);
        return Ok();
    }

    [HttpPut("{id}")]
    public IActionResult Put(Guid id, [FromBody] Tarea tarea) {
        tareaService.Update(id, tarea);
        return Ok();
    }

    [HttpDelete("{id}")]
    public IActionResult Delete(Guid id) {
        tareaService.Delete(id);
        return Ok();
    }
}

Faltó explicar en el curso los niveles en una Api REST

Excelente buena explicacion como siempre!

Bien explicado.

Que hace el atributo APIController?

VSC me marcaba error porque no tenía los métodos en la Interfaz de TareasService, solo asegurense de que estén definidos:

public interface ITareasService
{
  IEnumerable<Tarea> Get();
  Task Save(Tarea tarea);
  Task Update(Guid id, Tarea tarea);
  Task Delete(Guid id);
}

Y ya con eso queda el archivo de TareaController:

using Microsoft.AspNetCore.Mvc;
using webapi.Models;
using webapi.Services;

namespace webapi.Controllers;

[Route("/api/[controller]")]
public class TareaController : ControllerBase
{
  protected readonly ITareasService _tareasService;

  public TareaController(ITareasService service)
  {
    _tareasService = service;
  }

  [HttpGet]
  public IActionResult Get()
  {
    return Ok(_tareasService.Get());
  }

  [HttpPost]
  public IActionResult Post([FromBody] Tarea tarea)
  {
    _tareasService.Save(tarea);
    return Ok("Tarea creada");
  }

  [HttpPut("{id}")]
  public IActionResult Put(Guid id, [FromBody] Tarea tarea)
  {
    _tareasService.Update(id, tarea);
    return Ok("Tarea actualizada");
  }

  [HttpDelete("{id}")]
  public IActionResult Delete(Guid id)
  {
    _tareasService.Delete(id);
    return Ok("Tarea eliminada");
  }
}

![](

![](

Mi TareaController 😊

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using webapi.Models;
using webapi.Services;

namespace proyectapirest.Controllers;
[Route("api/[controller]")]
public class TareaController : ControllerBase
{
    ITareasService tareasService;

    public TareaController(TareasService service)
    {
        tareasService = service;
    }

    [HttpGet]
    public IActionResult Get()
    {
        return Ok(tareasService.Get());
    }
    [HttpPost]
    public IActionResult Post([FromBody] Tarea tarea)
    {
        tareasService.Save(tarea);
        return Ok();
    }
    [HttpPut("{id}")]
    public IActionResult Post(Guid id, [FromBody] Tarea tarea)
    {
        tareasService.Update(id, tarea);
        return Ok();
    }
    [HttpDelete("{id}")]
    public IActionResult Post(Guid id)
    {
        tareasService.Delete(id);
        return Ok();
    }
}