作者:1983热爱生活 | 来源:互联网 | 2023-05-27 17:07
它们之间是否有任何区别,而不是按键设置和获取数组中的对象?
class Registry
{
private $cOntainer=array();
public static function Set($name,$object){
self::$container[$name]=$object;
}
public static function &Get($name){
return self::$container[$name];
}
}
NightOwl888..
22
注册表模式
注册表模式是用于查找仅知道其名称的对象的模式.此模式在内部存储对象的实例,并使用字典映射稍后检索这些实例.
DI容器/ DI模式
DI容器包含一个注册表,该注册表具有对象类型到抽象的映射.更先进的是,当一个对象被解析时,它被实例化,所有对象的依赖性也是如此.
当您从DI容器请求对象时,您将获得一个对象图,该对象图以您请求的对象作为根.每个依赖对象都是通过递归遍历每个类的构造函数自动注入的,从没有依赖项的类开始,并使用注册表作为指导实例化每个对象.
依赖注入是一个模式是不一定使用DI容器.DI模式由位于应用程序入口点的组合根组成.组合根是注册类型的位置,以及实例化根对象图的位置.实例化根对象后,应用程序将自行运行.应用程序本身没有引用DI容器,也没有与它紧密耦合.
服务定位器
服务定位器被许多人认为是反模式的.您的想法是将容器注入对象或使用对DI容器的静态引用以在运行时创建实例.
主要区别在于应用程序明确依赖于(因此紧密耦合到)DI容器.
使用Service Locator的另一个缺点是,因为您正在注入DI容器,所以无法从类构造函数中看到它依赖的接口.您必须查阅文档或分析源代码以确定类的依赖关系.
虽然被认为是反模式,但仍有一些情况下使用它是有意义的.但是,在所有其他选项(环境背景,财产注入等)用尽之后,它应该被视为最后的手段.
1> NightOwl888..:
注册表模式
注册表模式是用于查找仅知道其名称的对象的模式.此模式在内部存储对象的实例,并使用字典映射稍后检索这些实例.
DI容器/ DI模式
DI容器包含一个注册表,该注册表具有对象类型到抽象的映射.更先进的是,当一个对象被解析时,它被实例化,所有对象的依赖性也是如此.
当您从DI容器请求对象时,您将获得一个对象图,该对象图以您请求的对象作为根.每个依赖对象都是通过递归遍历每个类的构造函数自动注入的,从没有依赖项的类开始,并使用注册表作为指导实例化每个对象.
依赖注入是一个模式是不一定使用DI容器.DI模式由位于应用程序入口点的组合根组成.组合根是注册类型的位置,以及实例化根对象图的位置.实例化根对象后,应用程序将自行运行.应用程序本身没有引用DI容器,也没有与它紧密耦合.
服务定位器
服务定位器被许多人认为是反模式的.您的想法是将容器注入对象或使用对DI容器的静态引用以在运行时创建实例.
主要区别在于应用程序明确依赖于(因此紧密耦合到)DI容器.
使用Service Locator的另一个缺点是,因为您正在注入DI容器,所以无法从类构造函数中看到它依赖的接口.您必须查阅文档或分析源代码以确定类的依赖关系.
虽然被认为是反模式,但仍有一些情况下使用它是有意义的.但是,在所有其他选项(环境背景,财产注入等)用尽之后,它应该被视为最后的手段.