Bekas Perkhidmatan Laravel adalah alat yang berkuasa untuk menguruskan kebergantungan kelas dan melakukan suntikan ketergantungan. Ia bertindak sebagai pendaftaran untuk kebergantungan dan kaedah menyelesaikannya apabila diperlukan. Inilah cara ia berfungsi dan bagaimana anda boleh menggunakannya:
Operasi kontena perkhidmatan:
Menggunakan suntikan ketergantungan:
Untuk menggunakan bekas perkhidmatan untuk suntikan ketergantungan, anda biasanya mengikuti langkah -langkah ini:
PaymentGateway
dan pelaksanaan konkrit StripePaymentGateway
. Daftar Bindings: Dalam pembekal perkhidmatan anda (biasanya AppServiceProvider
), anda mengikat antara muka ke pelaksanaan konkrit:
<code class="php">public function register() { $this->app->bind(PaymentGateway::class, StripePaymentGateway::class); }</code>
Ketergantungan jenis-hint: Dalam pembina kelas yang memerlukan ketergantungan, jenis-hint antara muka:
<code class="php">class OrderController extends Controller { public function __construct(PaymentGateway $paymentGateway) { $this->paymentGateway = $paymentGateway; } }</code>
Apabila Laravel instantiates OrderController
, ia secara automatik akan menyelesaikan dan menyuntik contoh StripePaymentGateway
kerana pengikatan yang anda buat.
Menggunakan bekas perkhidmatan Laravel untuk pengurusan ketergantungan menawarkan beberapa faedah:
Untuk mengikat antara muka ke pelaksanaan konkrit dalam bekas perkhidmatan Laravel, anda boleh menggunakan beberapa kaedah, bergantung kepada keperluan anda:
Mengikat sederhana:
Gunakan kaedah bind
dalam pembekal perkhidmatan untuk mengikat antara muka ke kelas konkrit:
<code class="php">$this->app->bind(InterfaceName::class, ConcreteImplementation::class);</code>
Singleton mengikat:
Sekiranya anda mahukan satu contoh kelas yang dikongsi di seluruh permohonan anda, gunakan singleton
:
<code class="php">$this->app->singleton(InterfaceName::class, ConcreteImplementation::class);</code>
Contoh mengikat:
Untuk mengikat contoh yang ada, gunakan instance
:
<code class="php">$instance = new ConcreteImplementation(); $this->app->instance(InterfaceName::class, $instance);</code>
Penutupan mengikat:
Untuk senario yang lebih kompleks, anda boleh menggunakan penutupan untuk menentukan bagaimana contoh harus dibuat:
<code class="php">$this->app->bind(InterfaceName::class, function ($app) { return new ConcreteImplementation($app->make(Dependency::class)); });</code>
Pengikatan ini biasanya ditubuhkan dalam kaedah register
pembekal perkhidmatan.
Untuk memanfaatkan ciri suntikan kebergantungan Laravel, ikuti amalan terbaik ini:
PaymentServiceProvider
untuk pengikatan yang berkaitan dengan pembayaran).Dengan mengikuti amalan ini, anda akan membuat aplikasi yang lebih mudah dipelihara, boleh diuji, dan fleksibel menggunakan sistem suntikan pergantungan Laravel yang kuat.
Atas ialah kandungan terperinci Bagaimanakah kontena perkhidmatan Laravel berfungsi dan bagaimana saya boleh menggunakannya untuk suntikan ketergantungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!