C'est un bon exemple pour vous permettre de comprendre facilement comment le mot inversifier et inversifier-injecter-décoration.
Je vais améliorer le code en suivant chaque étape ci-dessous :
Étape 1 : Cours normal
public class Cart { private readonly IDatabase _db; private readonly ILogger _log; private readonly IEmailSender _es; public Cart() { _db = new Database(); _log = new Logger(); _es = new EmailSender(); } public void Checkout(int orderId, int userId) { _db.Save(orderId); _log.LogInfo("Order has been checkout"); _es.SendEmail(userId); } }
Étape 2 : appliquer l'injection de dépendances
public Cart(IDatabase db, ILogger log, IEmailSender es) { _db = db; _log = log; _es = es; } //Dependency Injection simple way Cart myCart = new Cart(new Database(), new Logger(), new EmailSender()); //When you want to change new class. Update here myCart = new Cart(new XMLDatabase(), new FakeLogger(), new FakeEmailSender());
Étape 3 : Appliquer la liaison de graphe de dépendance
//Create each Interface DIContainer.SetModule<IDatabase, Database>(); DIContainer.SetModule<ILogger, Logger>(); DIContainer.SetModule<IEmailSender, EmailSender>(); DIContainer.SetModule<Cart, Cart>(); //MyCart just need to use it var myCart = DIContainer.GetModule(); public Cart() { _db = DIContainer.GetModule(); _log = DIContainer.GetModule(); _es = DIContainer.GetModule(); } //When you want to change some module in Cart. Just need to change in where it define. DIContainer.SetModule<IDatabase, XMLDatabase>();`
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!