翻译 What is the concept of Service Container in Laravel?
Laravel中的服务容器是依赖注入容器,也是应用的注册器
在手工创建对象时,使用服务容器的优势是:
拥有对象创建时管理所需要的依赖的能力
你规定在应用中对象应该如何被创建,每次你需要去创建实例时,你只要管服务容器要,它将一并把必要的依赖问题解决并为你创建
比如,代替手工使用new关键字创建对象:
//每日次我们需要YourClass类时,我们需要手动传入一个依赖
$instance = new YourClass($dependency);
你可以在服务容器中注册一个绑定:
//为YourClass类添加一个绑定
App::bind( YourClass::class, function()
{
//做一些准备工作:创建一个必要的依赖
$dependency = new DepClass( config('some.value') );
//创建并且返回对象的依赖
return new YourClass( $dependency );
});
通过服务容器创建一个实例:
//没必要去创建YourClass类依赖,服务容器将为我们做!
$instance = App::make( YourClass::class );
接口绑定一个具体的类
使用Laravel自动依赖注入,当一个接口在应用中被需要时(比如在控制器的构造器),一个具体的类被服务容器自动实例化。在绑定时改变具体的类,将会应用中改变具体的实例化对象:
//每一次UserRepositoryInterface接口被请求,将会创建一个EloquentUserRepository类
App::bind( UserRepositoryInterface::class, EloquentUserRepository::class );
使用服务容器作为注册器
你可以在容器中创建并储存一个唯一的实例,并且之后获取它们:使用App::instance方法实现绑定,就可以使用容器作为注册器。
//创建一个实例
$kevin = new User('Kevin');
//绑定到服务容器。
App::instance('the-user', $kevin);
//做一些其他事情
//获取对象实例
$kevin = App::make('the-user');
最后需要说明的是,实际上服务容器是一个应用对象:他继承自Container类,可以得到所有容器的方法
翻译 What is the concept of Service Container in Laravel?的更多相关文章
- Laravel之Service Container服务容器
managing class dependencies and performing dependency injection. Dependency injection is a fancy phr ...
- 利用 Github Actions 的 service container 进行集成测试
Github Action 中 Service Container 的使用 Intro 之前写过一个 StackExchange.Redis 的一个扩展,测试项目依赖 redis,所以之前测试一直只是 ...
- 翻译-使用Spring调用SOAP Web Service
原文链接: http://spring.io/guides/gs/consuming-web-service/ 调用SOAP web service 本指南将指导你使用Spring调用一个基于SOAP ...
- 看过这些我明白了依赖注入及IoC
背景 最近一段时间在学习laravel框架,了解到这个框架一个比较核心的概念就是服务容器,而服务容器似乎又和依赖注入有关系.但是碍于官方关于这方面的讲解篇幅过少,所以自学了一下. 自学的途径也跟大家一 ...
- kubeDNS workflow(service registration and discovery)
Service discovery In k8s, we usually will more than make an application instance, and also the corre ...
- 翻译 - ASP.NET Core 基本知识 - 配置(Configuration)
翻译自 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-5.0 ASP ...
- what is service?
SERVICE n.服务,服侍:服务业:维修服务:服役 vt.检修,维修:向…提供服务:保养:满足需要 adj.服务性的:耐用的:服现役的 更多详情:http://dict.baidu.com/s?w ...
- Laravel 之Service Providers
Service providers are the central place of all Laravel application bootstrapping. Your own applicati ...
- 基于.Net FrameWork的 RestFul Service
关于本文 这篇文章的目的就是向大家阐述如何在.net framework 4.0中创建RestFul Service并且使用它. 什么是web Services,什么是WCF 首先讲到的是web Se ...
随机推荐
- CopyOnWriteArrayList(复制数组 去实现)
一.Vector和SynchronizedList 1.1回顾线程安全的Vector和SynchronizedList 我们知道ArrayList是用于替代Vector的,Vector是线程安全的容器 ...
- Codesforces 467E Alex and Complicated Task
E. Alex and Complicated Task time limit per test 2 seconds memory limit per test 256 megabytes input ...
- Jquery的$.ajax、$.get、$.post发送、接收JSON数据及回调函数用法
平时研究代码时,经常会遇到AJAX的相关用法,做项目时才真正体会到Ajax的强大之处(与服务器数据交互如此之便捷,更新DOM节点而不用刷新整个页面),以及运用的频繁程度.今天整理了一下自己之前没搞清楚 ...
- mysql---级联更新和删除操作
我们通常有这样的需求:删除表Table 1中记录,需要同时删除其它表中与Table 1有关的若干记录. 对于这种,我们有两种解决方法: 一,使用innodb表的外键约束 ALTER TABLE `sc ...
- HashMap高并发下存在的问题
原文链接:https://blog.csdn.net/bjwfm2011/article/details/81076736 1.什么是HashMap? HashMap底层原理 HashMap是存储键值 ...
- 【和孩子一起学编程】 python笔记--第二天
第六章 GUI:用户图形界面(graphical user interface) 安装easygui:打开cmd命令窗口,输入:pip install easygui 利用msgbox()函数创建一个 ...
- C++11新特性之 Move semantics(移动语义)
https://blog.csdn.net/wangshubo1989/article/details/49748703 这篇讲到了vector的push_back的两种重载版本,左值版本和右值版本.
- UNP学习 多播
一.概述 单播地址标识单个接口,广播地址标识子网上的所有接口,多播地址标识一组接口. 单播和广播是编址方案的两个极端,多播的目的就在于提供一种折衷的方案. 二.多播地址 我们必须区分IPv4多播地址和 ...
- UVa 839 Not so Mobile (递归思想处理树)
Before being an ubiquous communications gadget, a mobilewas just a structure made of strings and wir ...
- 外部表及oracle数据库内存
create table alert1 (log varchar2(1000))2 organization external3 (type oracle_loader4 default direct ...