खोज…
कार्यान्वयन के लिए एक इंटरफ़ेस बांधना
एक सेवा प्रदाता register
विधि में हम एक इंटरफ़ेस को क्रियान्वयन के लिए बाँध सकते हैं:
public function register()
{
App::bind( UserRepositoryInterface::class, EloquentUserRepository::class );
}
अब से, हर बार ऐप को UserRepositoryInterface
की एक आवृत्ति की आवश्यकता होगी, Laravel ऑटो को EloquentUserRepository
का एक नया उदाहरण इंजेक्ट करेगा:
//this will get back an instance of EloquentUserRepository
$repo = App::make( UserRepositoryInterface:class );
एक उदाहरण बाँधना
हम सेवा कंटेनर का उपयोग किसी वस्तु के उदाहरण को बांध कर एक रजिस्ट्री के रूप में कर सकते हैं और जब हमें इसकी आवश्यकता होगी, इसे वापस प्राप्त कर सकते हैं:
// Create an instance.
$john = new User('John');
// Bind it to the service container.
App::instance('the-user', $john);
// ...somewhere and/or in another class...
// Get back the instance
$john = App::make('the-user');
सर्विस कंटेनर में एक सिंगलटन बांधना
हम एक वर्ग को एक सिंगलटन के रूप में बांध सकते हैं:
public function register()
{
App::singleton('my-database', function()
{
return new Database();
});
}
इस तरह, सर्विस कंटेनर में पहली बार 'my-database'
का एक उदाहरण दिया जाएगा, एक नया उदाहरण बनाया जाएगा। इस वर्ग के सभी क्रमिक अनुरोधों को पहले निर्मित उदाहरण वापस मिल जाएगा:
//a new instance of Database is created
$db = App::make('my-database');
//the same instance created before is returned
$anotherDb = App::make('my-database');
परिचय
सेवा कंटेनर मुख्य अनुप्रयोग वस्तु है। इसका उपयोग डिपेंडेंसी इंजेक्शन कंटेनर के रूप में किया जा सकता है, और सेवा प्रदाताओं में बाइंडिंग को परिभाषित करके आवेदन के लिए एक रजिस्ट्री
सेवा प्रदाता वे वर्ग हैं जहाँ हम अपने सेवा वर्गों को अनुप्रयोग के माध्यम से बनाएंगे, उनके विन्यास को बूटस्ट्रैप करेंगे और कार्यान्वयन के लिए इंटरफेस को बाध्य करेंगे।
सेवाएँ ऐसी कक्षाएं हैं जो एक या अधिक तर्क सहसंबद्ध कार्यों को एक साथ लपेटती हैं
एक निर्भरता इंजेक्शन कंटेनर के रूप में सेवा कंटेनर का उपयोग करना
हम आवेदन के एक बिंदु में उनकी निर्भरता के साथ वस्तुओं की निर्माण प्रक्रिया को बांधकर सेवा कंटेनर को एक निर्भरता इंजेक्शन कंटेनर के रूप में उपयोग कर सकते हैं
मान PdfCreator
हैं कि PdfCreator
के निर्माण को निर्भरता के रूप में दो वस्तुओं की आवश्यकता है; हर बार जब हमें PdfCreator
का एक उदाहरण बनाने की आवश्यकता PdfCreator
, तो हमें इन निर्भरताओं को पास करना चाहिए। सेवा कंटेनर को डीआईसी के रूप में उपयोग करके, हम बाध्यकारी परिभाषा में PdfCreator
के निर्माण को परिभाषित करते हैं, सेवा कंटेनर से आवश्यक निर्भरता सीधे लेते हैं:
App:bind('pdf-creator', function($app) {
// Get the needed dependencies from the service container.
$pdfRender = $app->make('pdf-render');
$templateManager = $app->make('template-manager');
// Create the instance passing the needed dependencies.
return new PdfCreator( $pdfRender, $templateManager );
});
फिर, हमारे एप्लिकेशन के प्रत्येक बिंदु में, एक नया PdfCreator
प्राप्त करने के लिए, हम बस कर सकते हैं:
$pdfCreator = App::make('pdf-creator');
और सेवा कंटेनर हमारे लिए आवश्यक निर्भरता के साथ एक नया उदाहरण बनाएगा।