พึ่งพาการฉีดเป็นชื่อที่น่ากลัว(IMO) 1สำหรับแนวคิดที่ค่อนข้างตรงไปตรง นี่คือตัวอย่าง:
- คุณมีเมธอด (หรือคลาสพร้อมเมธอด) ที่ทำ X (เช่นดึงข้อมูลจากฐานข้อมูล)
- ในฐานะส่วนหนึ่งของการทำ X วิธีดังกล่าวจะสร้างและจัดการทรัพยากรภายใน (เช่นก
DbContext
) ทรัพยากรภายในนี้คือสิ่งที่เรียกว่าการพึ่งพา
- คุณลบการสร้างและการจัดการทรัพยากร (เช่น
DbContext
) ออกจากวิธีการและทำให้เป็นความรับผิดชอบของผู้โทรเพื่อให้ทรัพยากรนี้ (เป็นพารามิเตอร์วิธีการหรือตามการเริ่มชั้นเรียน)
- ตอนนี้คุณกำลังทำการฉีดพึ่งพา
[1] : ผมมาจากพื้นหลังในระดับต่ำกว่าและเอาฉันเดือนที่จะนั่งลงและเรียนรู้การพึ่งพาการฉีดเพราะชื่อที่แสดงถึงมันจะเป็นสิ่งที่มีความซับซ้อนมากขึ้นเช่นDLL ฉีด ความจริงที่ว่า Visual Studio (และเราเป็นผู้พัฒนาโดยทั่วไป) หมายถึงไลบรารี. NET (DLLs หรือแอสเซมบลี ) ที่โครงการขึ้นอยู่กับว่าการพึ่งพาไม่ได้ช่วยเลย มีสิ่งแม้เช่นเป็นพึ่งพาวอล์คเกอร์ (depends.exe)
[แก้ไข] ฉันคิดว่าบางรหัสการสาธิตจะมีประโยชน์สำหรับบางคนดังนั้นนี่คือรหัส (ใน C #)
โดยไม่ต้องพึ่งพาการฉีด:
public class Repository : IDisposable
{
protected DbContext Context { get; }
public Repository()
{
Context = new DbContext("name=MyEntities");
}
public void Dispose()
{
Context.Dispose();
}
}
ผู้บริโภคของคุณจะทำสิ่งที่ชอบ:
using ( var repository = new Repository() )
{
// work
}
ชั้นเรียนเดียวกันที่นำมาใช้กับรูปแบบการฉีดพึ่งพาจะเป็นเช่นนี้:
public class RepositoryWithDI
{
protected DbContext Context { get; }
public RepositoryWithDI(DbContext context)
{
Context = context;
}
}
ขณะนี้เป็นความรับผิดชอบของผู้โทรที่จะยกตัวอย่าง a DbContext
และ pass (errm, inject ) ให้กับชั้นเรียนของคุณ:
using ( var context = new DbContext("name=MyEntities") )
{
var repository = new RepositoryWithDI(context);
// work
}