翻译 What is the concept of Service Container in Laravel?
2024-10-07 17:53:12
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类,可以得到所有容器的方法
最新文章
- 窥探Swift之基本数据类型
- Android高手速成
- centos,nginx安装备忘
- 我见过的 Objective-C, 讲的最通俗易懂的入门教程....
- apt-cache madison package-name
- Android学习----AndroidManifest.xml文件解析
- Handler消息源代码分析
- CSS的兼容性与BUG处理
- dotnet core 2.0在ubuntu下安装失败
- 常用YUV转RGB代码
- Linux压缩命令总结
- linux gcc 静态 动态链接库
- php防范
- js获取iframe中的元素
- CentOS6.5 QT5.3 找不到GLIBCXX3.4.15解决方法
- UVA 11136 Hoax or what (multiset)
- Multipart polyline to single part lines
- plsql programming 01 plsql概述
- 调用组件的C++代码
- pat02-线性结构4. Pop Sequence (25)