Scrutor C# (.NET) : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Scrutor C# (.NET) : guide complet avec exemples

Scrutor est une bibliothèque open source pour la plateforme .NET qui étend le mécanisme d'injection de dépendances (Dependency Injection, DI) intégré avec des fonctionnalités de scan automatique d'assemblies (assembly scanning). Elle permet d'enregistrer des services dans le conteneur DI en se basant sur des conventions de nommage, des attributs ou des interfaces, simplifiant considérablement la configuration du conteneur IoC dans les grands projets.

Pourquoi utiliser cette bibliothèque ? Dans le conteneur standard Microsoft.Extensions.DependencyInjection, chaque service doit être enregistré manuellement : services.AddScoped<IMyService, MyService>(). Dans un projet contenant des dizaines ou des centaines de services, cela entraîne un gonflement du code dans Startup.cs ou Program.cs, réduit la lisibilité et augmente le risque d'erreurs. Scrutor résout ce problème en permettant d'enregistrer tous les services d'un assembly en une seule ligne : services.Scan(scan => scan.FromAssemblyOf<IMyService>()...).

Scrutor est particulièrement utile dans les architectures utilisant le Domain-Driven Design (DDD), la Clean Architecture ou les monolithes modulaires. Il trouve automatiquement toutes les implémentations d'interfaces, les classes avec des attributs spécifiques (par exemple, [ServiceDescriptor]) ou les classes correspondant à certains modèles de nommage (par exemple, toutes les classes se terminant par "Repository"). Cela rend le code plus propre et l'ajout de nouveaux services devient une tâche triviale sans nécessiter de modification de la configuration DI.

Installation

Scrutor s'installe via le gestionnaire de paquets NuGet. Exécutez l'une des commandes suivantes :

# Via .NET CLI
dotnet add package Scrutor

# Via Package Manager Console (Visual Studio)
Install-Package Scrutor

Après l'installation, une référence à la bibliothèque Scrutor sera ajoutée à votre projet. Assurez-vous d'avoir installé le SDK .NET version 6.0 ou supérieure (.NET 8.0+ recommandé).

Démarrage rapide

Examinons un exemple fonctionnel minimal. Créons une application console avec trois fichiers : l'interface IGreetingService, son implémentation GreetingService et le point d'entrée Program.cs.

// IGreetingService.cs
public interface IGreetingService
{
    string Greet(string name);
}

// GreetingService.cs
public class GreetingService : IGreetingService
{
    public string Greet(string name) => $"Bonjour, {name}!";
}

// Program.cs
using Microsoft.Extensions.DependencyInjection;
using Scrutor;

var services = new ServiceCollection();

// Enregistrement manuel (approche classique)
// services.AddTransient<IGreetingService, GreetingService>();

// Enregistrement via Scrutor (scan d'assembly)
services.Scan(scan => scan
    .FromAssemblyOf<IGreetingService>() // Scanne l'assembly contenant IGreetingService
    .AddClasses(classes => classes.AssignableTo<IGreetingService>()) // Cherche les classes implémentant IGreetingService
    .AsImplementedInterfaces() // Enregistre comme implémentation d'interface
    .WithTransientLifetime()); // Définit la durée de vie Transient

var serviceProvider = services.BuildServiceProvider();
var greetingService = serviceProvider.GetRequiredService<IGreetingService>();
Console.WriteLine(greetingService.Greet("Monde"));
// Sortie : Bonjour, Monde!

Dans cet exemple, Scrutor trouve automatiquement la classe GreetingService dans le même assembly que l'interface IGreetingService et l'enregistre en tant que Transient. Si vous ajoutez une nouvelle implémentation de IGreetingService, elle sera enregistrée automatiquement sans modifier le code de Program.cs.

Méthodes et classes principales

Scrutor fournit une API fluide pour construire des chaînes d'appels. Voici 8 méthodes/classes clés avec leurs signatures, descriptions et exemples.

1. Scan(IServiceCollection, Action<ITypeSourceSelector>)

Recommendations