ทั้งสองรูปแบบดูเหมือนจะนำหลักการของการกลับมาควบคุม นั่นคือวัตถุไม่ควรรู้วิธีสร้างการพึ่งพา
พึ่งพาการฉีด (DI) ดูเหมือนว่าจะใช้ตัวสร้างหรือ setter เพื่อ "ฉีด" มันขึ้นอยู่กับการพึ่งพา
ตัวอย่างการใช้ Constructor Injection:
//Foo Needs an IBar
public class Foo
{
private IBar bar;
public Foo(IBar bar)
{
this.bar = bar;
}
//...
}
ผู้ให้บริการดูเหมือนว่าจะใช้ "ภาชนะ" ซึ่งสายขึ้นอยู่กับการพึ่งพาและให้แถบมันเป็น foo
ตัวอย่างการใช้ตัวระบุบริการ:
//Foo Needs an IBar
public class Foo
{
private IBar bar;
public Foo()
{
this.bar = Container.Get<IBar>();
}
//...
}
เนื่องจากการพึ่งพาของเราเป็นเพียงวัตถุเองการพึ่งพาเหล่านี้มีการพึ่งพาซึ่งมีการพึ่งพามากขึ้นและอื่น ๆ เป็นต้น ดังนั้น Inversion of Control Container (หรือ DI Container) จึงเกิดขึ้น ตัวอย่าง: Castle Windsor, Ninject, แผนผังโครงสร้าง, Spring, ฯลฯ )
แต่คอนเทนเนอร์ IOC / DI ดูเหมือนว่าตัวระบุบริการ การเรียกชื่อคอนเทนเนอร์ DI เป็นชื่อที่ไม่ดีหรือไม่? IOC / DI Container เป็นเพียงแค่Locator ประเภทอื่นหรือไม่ ความแตกต่างกันนิดหน่อยในความจริงที่ว่าเราใช้ DI Containers เป็นส่วนใหญ่เมื่อเรามีการพึ่งพาจำนวนมาก?