Laravel 文档中的 Service Providers

$this->app->singleton(‘ReportServices‘, function () {
    return new \App\Services\ReportServices();
});

以后在其他class里我可以用

app(‘ReportServices‘)->xxxxxx();

去替换
$services = new \App\Services\ReportServices();
$services->xxxxxx();

所谓ioc 容器的说法我觉得用服务容器的更合适,ioc只是一种思想,实现ioc可以是依赖注入,也可以服务定位器,策略模式,思想和实现之间我觉得不能混为一谈。laravel中的容器是把被依赖的类当作服务,每当需要传入被依赖的类时,比如你想使用缓存类,换句话说你现在依赖一个缓存服务时,由一个叫做容器的类负责具体的实例化,其工作就是解析类,解析出你的缓存服务是memcache还是redis,还是别的什么,然后实例化,注入到你的消费类中,如此就实现了ioc。当然这需要抽象的配合,否则你注入个别的,方法不一样当然无法工作了。容器只是一种管理类的方式。那么问题来了,容器怎么知道要创建哪个类的实例?也就是类是如何被解析的?这个就可以在service provider里绑定,你把需要用的实现在这里绑定,当容器需要时就知道解析到哪个类了。那么问题又来了,程序如何知道都有哪些service provider? 这又在config/app里面定义的,专业点说注册服务。我建议你自己亲自动手创建一个service provider 绑定一个服务,注册,又或者你玩玩别的独立的服务容器,比如pimple,把他用在你自己的项目中,就很好理解了。至于facade,更好理解,实际是通过容器解析到实际的类,然后通过魔术方法去实际的类上执行方法。我也是醉了。这也是很多人批评facade的原因,这东西多包装了一层语法糖而已。
时间: 2024-08-09 22:03:11

Laravel 文档中的 Service Providers的相关文章

laravel文档中提及的request的生命周期

请求进入 public/index.php 文件. bootstrap/start.php 文件创建应用程序对象并检测环境. 内部的 framework/start.php 文件配置相关设置并加载服务提供器. 加载应用程序 app/start 目录下的文件. 加载应用程序的 app/routes.php 文件. 将 Request 对象发送给应用程序对象,应用程序对象返回一个 Response 对象. 将 Response 对象发回客户端.

java使用正则从爬虫爬的txt文档中提取QQ邮箱

我的需求是从一堆文档中提取出qq邮箱,写了这篇帖子,希望能帮助和我有一样需求的人,谢谢!...... import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.regex.Matcher; import java.util.regex.Pattern; public class GetEmail { public static void getEmail() {

用python从符合一定格式的txt文档中逐行读取数据并按一定规则写入excel(openpyxl支持Excel 2007 .xlsx格式)

前几天接到一个任务,从gerrit上通过ssh命令获取一些commit相关的数据到文本文档中,随后将这些数据存入Excel中.数据格式如下图所示 观察上图可知,存在文本文档中的数据符合一定的格式,通过python读取.正则表达式处理并写入Excel文档将大大减少人工处理的工作量. 1. 从gerrit获取原始信息,存入文本文档: $ssh –p 29418 <your-account>@192.168.1.16 gerrit query status:merged since:<date

用Aspose.Words for .NET动态生成word文档中的数据表格

1.概述 最近项目中有一个这样的需求:导出word 文档,要求这个文档的格式不是固定的,用户可以随便的调整,导出内容中的数据表格列是动态的,例如要求导出姓名和性别,你就要导出这两列的数据,而且这个文档不是导出来之后再调整而是导出来后已经是调整过了的.看到这里,您也许马上想到用模板导出!而且.NET中自带有这个组件:Microsoft.Office.Interop.Word,暂且可以满足需求吧.但这个组件也是有局限性的,例如客户端必须装 office组件,而且编码复杂度高.最麻烦的需求是后面那个-

HTML文档中应用css样式的方法总结

在HTML文档中应用css样式大致有三种方法:1.link标签链接外部样式表:2.使用style元素包含样式表:3.使用style属性,即内联样式 一.link标签链接外部样式表 先看一条较为标准的link标记语句: <link rel="stylesheet" type="text/css" href="main.css" media="all" /> link标记必须放在head元素中,且不能放在其他元素(如t

html文档中的DOCTYPE标签

在写html页面的时候我们一般都会在首行添加〈!DOCTYPE〉的标签,有些编辑器会自动帮我们添加,今天讲讲这个〈!DOCTYPE〉标签的作用. HTML与XHTML 在W3C组织还么颁发html标准之前,开发网页的时候大家都没有加这个标签,那个时候.html页面的开发也比较混乱,直到1999年的时候,HTML 4.01成为了推荐标准,那时候起大多数人都使用这个版本.又大概在2000年的时候,W3C组织又颁发了基于HTML4.01的XML版本,并命名为XHTML1.0. 两者其实主要的差别是XH

将sytyle提出到领一个文档中

在当前页面目录下新建一个文档(css) 在css文档中新建命名为"与网页文件同名.css" 将<head></head>中,<style></style>中的内容粘贴到新css文件中将style标签删掉 在网页文件原位置添加"<link rel="stylesheet" type="text/css" href="./css/index.css">"

把word文档中的所有图片导出

把word文档中的所有图片导出 end

【Linux】用grep在文档中查找内容

有时候,我们需要在文档中查找一些内容,常用grep.它在文档查找相关内容并输出匹配行. > 查找某关键字 在system.log中,查找包含keyword的行 grep 'keyword' system.log 查找时附带输出行号,方便查看 grep -n 'keyword' system.log > 默认支持基本正则表达式 查找以2015-09-24开头的行 grep '^2015-09-24' system.log > 支持扩展正则表达式 正则表达式应用在各个领域,用它配合grep查