Aller au contenu principal

9-8 Créer un premier Service

Comme premier service, nous allons créer EvenementService.

Créer le service EvenementService

  1. Clic droit sur le dossier Services -> Add -> Class/Interface
  2. Nommer la classe EvenementService

Injection du EvenementRepository

Le service fera appel au repository pour obtenir les données et ce dernier sera injecté via le constructeur.

Snowfall.Application/Services/EvenementService.cs
public class EvenementService
{
private readonly IEvenementRepository _evenementRepository;

public EvenementService(IEvenementRepository evenementRepository)
{
_evenementRepository = evenementRepository;
}
//...

Ensuite, les 2 fonctions d'accès aux données seront répliquées au niveau du service, mais de façon très simple.

Snowfall.Application/Services/EvenementService.cs
public class EvenementService
{
private readonly IEvenementRepository _evenementRepository;

public EvenementService(IEvenementRepository evenementRepository)
{
_evenementRepository = evenementRepository;
}

public async Task<List<Evenement>> GetAll()
{
return await _evenementRepository.GetAll();
}

public async Task<Evenement?> FindById(int id)
{
return await _evenementRepository.FindById(id);
}
}

Création de l'interface IEvenementService

Même principe que pour EvenementRepository, une interface sera créée afin d'établir le contrat que doit respecter la classe et cette dernière sera utilisée pour l'injection de dépendances.

  1. Clic droit sur le nom de la classe EvenementService
  2. Refactor -> Extract Interface... Imgur
  3. Cocher Its own file
  4. Cocher tous les membres

Vous devriez avoir un fichier IEvenementService nouvellement créé au même niveau.

Modification du contrôleur

On veut que le contrôleur communique avec la couche Application, soit la logique applicative et non Data directement.

  1. Ajouter le projet Snowfall.Application au projet Snowfall.Mvc via Add -> Reference.
  2. Modifier le constructeur du contrôleur et la variable privée pour faire référence au service plutôt qu'au repository.
    Snowfall.Web.Mvc/Controllers/EvenementsController.cs
    public class EvenementsController : Controller
    {
    private IEvenementService _evenementService;

    public EvenementsController(IEvenementService evenementService)
    {
    _evenementService = evenementService;
    }
    //...
  3. Modifier les actions Index() et Show() pour quelles utilisent le service.
    // Dans la fonction Index()
    List<Evenement> evenements = await _evenementService.GetAll();

    // Dahs la fonction Show()
    var evenement = await _evenementService.FindById(id);

Injection de dépendances

Il ne reste qu'à ajouter EvenementService en tant qu'objet disponible pour injection de dépendance.

Snowfall.Web.Mvc/Program.cs
// Injection de dépendances
builder.Services.AddSingleton<DapperContext>();
builder.Services.AddScoped<IEvenementRepository, EvenementRepository>();
builder.Services.AddScoped<IEvenementService, EvenementService>();

Lancer l'application

Assurez-vous que l'application s'exécute correctement. À ce stade-ci, tout devrait fonctionner normalement!

level up