... ادامه پست قبلی
در مثال بالا با تزریق وابستگی ها از طریق کاستراکتور آشنا شدیم، اما راه های دیگری نیز وجود دارد. شامل:
1 -
Setter Injection :در این روش، به جای تزریق وابستگیها از طریق کانستراکتور، از متدهای
Setter کلاس استفاده میکنیم تا وابستگیها را تنظیم کنیم.class EmailSender {
private $mailer;
public function setMailer(MailerInterface $mailer) {
$this->mailer = $mailer;
}
public function sendEmail($to, $subject, $body) {
}
}
$smtpMailer = new SmtpMailer();
$emailSender = new EmailSender();
$emailSender->setMailer($smtpMailer);
$emailSender->sendEmail('user@example.com', 'Test Subject', 'Test Body');
————2 -
Method Injection :در این روش، وابستگیها را به صورت آرگومانهای ورودی به متدها تزریق میکنیم.
class EmailSender {
public function sendEmail($to, $subject, $body, MailerInterface $mailer) {
}
}
$smtpMailer = new SmtpMailer();
$emailSender = new EmailSender();
$emailSender->sendEmail('user@example.com', 'Test Subject', 'Test Body', $smtpMailer);
————3 -
Container (IoC) Injection :در این روش، از یک کانتینر (
Container) نرمافزاری برای ایجاد شئ ها و تزریق وابستگیها استفاده میشود. این کانتینر مسئول ایجاد و مدیریت شئ ها و تزریق وابستگیها به طور خودکار است.$container = new Container();تمام این روشها برای تزریق وابستگیها مناسب هستند و انتخاب بین آنها بستگی به نیازها و معماری کد شما دارد. استفاده از
$container->register('mailer', SmtpMailer::class);
$container->register('emailSender', EmailSender::class)->withArgument('mailer');
$emailSender = $container->get('emailSender');
$emailSender->sendEmail('user@example.com', 'Test Subject', 'Test Body');
Dependency Injection باعث کاهش وابستگیها و افزایش انعطافپذیری و قابلیت تست کد میشود..