تزریقِ وابستگی ( به انگلیسی: Dependency Injection ( DI ) ) در برنامه نویسی شیءگرا، الگوی طراحیست با قاعدهٔ اصلیِ جداکردنِ رفتار از تحلیلِ نیازمندی ( به انگلیسی: Dependency Resolution ) : فنی برای تجزیه کردنِ مؤلفه هایِ بسیار مستقلِ نرم افزاری ( به انگلیسی: Software Components ) . به صورت خلاصه تزریق وابستگی، الگویی است جهت تزریق وابستگی های خارجی یک کلاس به آن، به جای استفاده مستقیم از آن وابستگی ها در درون کلاس.
کلاس زیر را در نظر بگیرید
class SendSingleSMS { private $gateway; public function __construct ( ) { $configs = new Configs ( ' gateway_attributes' ) ; $this - > gateway = new Gateway ( $configs ) ; } public function send ( ) { $this - > gateway - > sendSingle ( ) ; } } اگر بخواهید آرگومان جدیدی به کلاس Gateway اضافه کنید مجبورید در تمام کلاس های ایجاد شده ( SendSingleSMS, SendMultiSMS, SendIrancellSMS, . . . ) دست برده و تغییر ایجاد نمایید. و حتماً تغییرات بیشتر خواهد شد به خصوص اینکه تعداد استفاده کنندگان از Gateway بیشتر شود. با استفاده از تزریق وابستگی کلاس فوق را میتوان مشابه زیر نوشت :
class SendSingleSMS { private $gateway; public function __construct ( Gateway $gateway ) { $this - > gateway = $gateway; } public function send ( ) { $this - > gateway - > sendSingle ( ) ; } } همانطور که مشاهده می کنید برای استفاده از کلاس فوق متغیری به نام gateway بایستی به سازنده کلاس تزریق شود. این کار باعث می شود که کلاس فوق بدون درگیر شدن با وابستگی های Gateway, از آن استفاده کند. و مشخصا هرچقدر هم تعداد استفاده کنندگان از Gateway به روش تزریق وابستگی بیشتر شود, در رابطه با تغییرات احتمالی سازنده کلاس Gateway نگرانی وجود نخواهد داشت. چرا که کلاس های استفاده کننده مانند SendSingleSMS درگیر ایجاد کلاس Gateway نشده اند.
این نوشته برگرفته از سایت ویکی پدیا می باشد، اگر نادرست یا توهین آمیز است، لطفا گزارش دهید: گزارش تخلفکلاس زیر را در نظر بگیرید
class SendSingleSMS { private $gateway; public function __construct ( ) { $configs = new Configs ( ' gateway_attributes' ) ; $this - > gateway = new Gateway ( $configs ) ; } public function send ( ) { $this - > gateway - > sendSingle ( ) ; } } اگر بخواهید آرگومان جدیدی به کلاس Gateway اضافه کنید مجبورید در تمام کلاس های ایجاد شده ( SendSingleSMS, SendMultiSMS, SendIrancellSMS, . . . ) دست برده و تغییر ایجاد نمایید. و حتماً تغییرات بیشتر خواهد شد به خصوص اینکه تعداد استفاده کنندگان از Gateway بیشتر شود. با استفاده از تزریق وابستگی کلاس فوق را میتوان مشابه زیر نوشت :
class SendSingleSMS { private $gateway; public function __construct ( Gateway $gateway ) { $this - > gateway = $gateway; } public function send ( ) { $this - > gateway - > sendSingle ( ) ; } } همانطور که مشاهده می کنید برای استفاده از کلاس فوق متغیری به نام gateway بایستی به سازنده کلاس تزریق شود. این کار باعث می شود که کلاس فوق بدون درگیر شدن با وابستگی های Gateway, از آن استفاده کند. و مشخصا هرچقدر هم تعداد استفاده کنندگان از Gateway به روش تزریق وابستگی بیشتر شود, در رابطه با تغییرات احتمالی سازنده کلاس Gateway نگرانی وجود نخواهد داشت. چرا که کلاس های استفاده کننده مانند SendSingleSMS درگیر ایجاد کلاس Gateway نشده اند.
wiki: تزریق وابستگی