9-8 Créer un premier Service
Comme premier service, nous allons créer EvenementService
.
Créer le service EvenementService
Clic droit
sur le dossierServices
->Add
->Class/Interface
- 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.
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.
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.
Clic droit
sur le nom de la classeEvenementService
Refactor
->Extract Interface...
- Cocher
Its own file
- 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.
- Ajouter le projet
Snowfall.Application
au projetSnowfall.Mvc
viaAdd
->Reference
. - 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;
}
//... - Modifier les actions
Index()
etShow()
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.
// 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!