C# ASPNET

Service

C'est quoi un service en ASP.NET Core ?
Un service est une classe qui contient la logique métier (business logic).
Elle est utilisée dans les contrôleurs via injection de dépendances (DI).
Exemples de logique métier : Le principe : Tu mets ta logique dans un service → tu l'injectes dans tes contrôleurs → ton code est propre, testable et structuré.

Définir un service (Interface + Implémentation)

Interface (contrat)


public interface IAnimalService
{
    IEnumerable GetAll();
    Animal? Get(int id);
    Animal Create(Animal animal);
    bool Delete(int id);
} 

Implémentation du service


public class AnimalService : IAnimalService
{
    private readonly List<Animal> _animals = new()
    {
        new Animal { Id = 1, Name = "Chat", Age = 3 },
        new Animal { Id = 2, Name = "Chien", Age = 5 }
    };

    public IEnumerable<Animal> GetAll() => _animals;

    public Animal? Get(int id) =>
        _animals.FirstOrDefault(a => a.Id == id);

    public Animal Create(Animal a)
    {
        a.Id = _animals.Max(x => x.Id) + 1;
        _animals.Add(a);
        return a;
    }

    public bool Delete(int id)
    {
        var a = Get(id);
        if (a == null) return false;
        _animals.Remove(a);
        return true;
    }
}

Enregistrer le service dans Program.cs

Les services sont ajoutés dans le conteneur DI :
      
builder.Services.AddSingleton();
Types possibles :
Cas d'usage Type de service recommandé
AddSingleton 1 instance pour toute l'application
AddScoped 1 instance par requête HTTP
Calcul rapide / Service stateless Nouvelle instance à chaque appel
Pour une API classique → AddScoped est souvent utilisé.

Injecter le service dans un contrôleur


[ApiController]
[Route("api/[controller]")]
public class AnimalsController : ControllerBase
{
    private readonly IAnimalService _service;

    public AnimalsController(IAnimalService service)
    {
        _service = service;
    }

    [HttpGet]
    public IActionResult GetAll()
    {
        return Ok(_service.GetAll());
    }
}
ASP.NET Core fournit automatiquement l’instance de IAnimalService.

Exemple complet (mini‑API avec service)

Program.cs


      var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();
builder.Services.AddSingleton<IAnimalService, AnimalService>();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.MapControllers();
app.Run();

Services/IAnimalService.cs


      public interface IAnimalService
{
    IEnumerable<Animal> GetAll();
    Animal? Get(int id);
}

Services/AnimalService.cs


      public class AnimalService : IAnimalService
{
    private readonly List _animals = new()
    {
        new Animal { Id = 1, Name = "Chat", Age = 3 },
        new Animal { Id = 2, Name = "Chien", Age = 5 }
    };

    public IEnumerable GetAll() => _animals;
    public Animal? Get(int id) => _animals.FirstOrDefault(a => a.Id == id);
}

Controllers/AnimalsController.cs


      [ApiController]
[Route("api/[controller]")]
public class AnimalsController : ControllerBase
{
    private readonly IAnimalService _service;

    public AnimalsController(IAnimalService service)
    {
        _service = service;
    }

    [HttpGet]
    public IActionResult GetAll() => Ok(_service.GetAll());
}

Quand utiliser quel type de service ?

Cas d’usage Type de service recommandé
Accès à la base de données Scoped
Lecture de configuration Singleton
Calcul rapide / Service stateless Transient
Cache en mémoire Singleton
API / Services REST Scoped