La gestion du cycle de vie des dépendances consiste à organiser la création, l'initialisation, la mise à jour et la destruction des composants de l'application de manière à ce qu'ils soient indépendants les uns des autres et facilement testables. Pour cela, des conteneurs IoC (Inversion of Control) et le modèle d'injection de dépendances (DI) sont souvent utilisés.
Le conteneur IoC permet :
Exemple en C# avec Microsoft.Extensions.DependencyInjection :
public interface IMessageSender { void Send(string msg); } public class EmailSender : IMessageSender { public void Send(string msg) { /* envoi d'email */ } } // Enregistrement des dépendances var services = new ServiceCollection(); services.AddScoped<IMessageSender, EmailSender>(); // Obtention d'une instance var provider = services.BuildServiceProvider(); var sender = provider.GetService<IMessageSender>(); sender.Send("Salut !");
Caractéristiques clés :
Quelle est la différence entre l'injection de dépendances (DI) et le modèle Service Locator, et pourquoi le Service Locator est-il considéré comme un antipattern ?
Le Service Locator viole la transmission explicite des dépendances, rendant le code moins transparent. Il est préférable d'utiliser DI via le constructeur ou des méthodes afin que le compilateur puisse contrôler la validité des dépendances.
// Mauvais : Service Locator var sender = ServiceLocator.Get<IMessageSender>(); // Bon : via DI public class MyService { public MyService(IMessageSender sender) { ... } }
Quelle est la différence entre le modèle Singleton et le temps de vie Single Instance dans un conteneur DI ?
Le modèle Singleton est implémenté manuellement et n'est pas dépendant du conteneur ; Single Instance fournit une instance à partir du conteneur, ce qui est plus sûr pour les tests unitaires et l'extension.
Faut-il injecter des dépendances dans toutes les classes, même les utilitaires simples ?
Non. Il n'est pas nécessaire d'injecter DI dans des utilitaires sans dépendances ou des classes d'assistance faiblement couplées (par exemple, une classe de constantes mathématiques) — cela compliquerait le code sans apporter de bénéfice.