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 :
- gérer les animaux
- envoyer des emails
- accéder à une base SQL
- lire un fichier
- faire du calcul, transformation, etc.
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 |