这是一个很好的例子,让您轻松理解如何反转和反转注入装饰词。
我将按照以下每个步骤改进代码:
第1步:普通课
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); } }
第2步:应用依赖注入
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());
第 3 步:应用依赖图绑定
//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>();` </idatabase></cart></iemailsender></ilogger></idatabase>