Par exemple, j'ai créé un nouveau répertoire Services dans le répertoire APP, et y ai placé un service d'envoi d'emails, EmailService.php. Lorsque je veux l'appeler dans d'autres contrôleurs, je peux directement citer :
.use App\Services\EmailService;
De cette façon, vous pouvez l'utiliser normalement.
Alors la question est :
1. S'il peut être utilisé normalement comme ci-dessus, dans quelles circonstances ce service
doit-il être placé chez le fournisseur de services
? 服务
放到服务提供者
里面去?
2、服务提供者
、服务容器
之间的关系一直搞不太清楚,究竟服务
是放到服务容器
里面还是服务提供者
里面?服务提供者
和服务容器
2. La relation entre le fournisseur de services
et le conteneur de services
n'a jamais été claire. Le service
est-il placé dans le conteneur de services
À l'intérieur ou Fournisseur de services
? Quelles sont les responsabilités respectives du Fournisseur de services
et du Conteneur de services
?
dans
服务提供者
把服务
放进服务容器
.Une autre introduction aux conteneurs d'injection de dépendances : apprenez à arrêter le câblage et à aimer le conteneur de Laravel
Le questionneur posera cette question. Je suppose que le questionneur ne sait toujours pas grand-chose sur l'injection de dépendances et le conteneur de services de Laravel. (Bien sûr, je ne le comprends pas très bien. Ce qui suit n'est que ma simple compréhension)
Si vous spécifiez directement une classe sous un certain espace de noms à l'intérieur de votre contrôleur (cette classe doit être une implémentation d'une interface (contrat)), alors cette classe sera couplée au contrôleur. Lorsque vous souhaitez modifier cette classe d'implémentation, vous devez modifier le contrôleur et les méthodes appelées dans le contrôleur.
Si vous l'écrivez dans le fournisseur de services, d'une part, il peut être découplé (les paramètres de la méthode du contrôleur sont injectés dans la classe d'implémentation du service via des indices de type), et d'autre part, si le service dépend également d'autres services, le service de laravel Le Le conteneur gère ces dépendances automatiquement. Au lieu d'utiliser un tas de syntaxes d'utilisation devant le contrôleur pour importer vous-même ces bibliothèques dépendantes. Troisièmement, l'interface restreint le service à fournir uniquement les méthodes qu'il devrait fournir (responsabilité unique).
Compréhension de base, veuillez signaler dans la zone de commentaires s'il y a des erreurs.
Conteneur de services et fournisseur de services sont deux choses différentes, sans aucune relation obligatoire, j'en parlerai donc séparément ci-dessous.
Conteneur de service :
est une variable de tableau associatif global, qui y stocke des éléments, puis l'objet peut être récupéré par son nom n'importe où.
Fournisseur de services :
Dans chaque fournisseur de services, il y a un morceau de code d'initialisation qui sera utilisé par l'ensemble du programme, tel que
Nous pouvons voir dans l'exemple ci-dessus que nous devons toujours écrire ces codes d'initialisation. C'est juste que Laravel le définit comme une spécification, vous obligeant à classer et stocker le code d'initialisation. (Vous pouvez toujours mettre différents types de code d'initialisation dedans
app/Providers/AppServiceProvider.php
)Veuillez me corriger.