これは、ワードを反転および反転挿入する方法を簡単に理解するための良い例です。
以下の各ステップに従ってコードを改善していきます。
ステップ 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>();`
以上がInversify および Inversify-inject-decoratorsの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。