美文网首页
依赖注入(DI)

依赖注入(DI)

作者: 该死的金箍 | 来源:发表于2024-03-08 14:27 被阅读0次

    依赖注入(Dependency Injection,简称 DI)是一种软件设计模式,用于解耦组件之间的依赖关系。在传统的程序设计中,组件通常会直接创建和管理它们所依赖的对象,这会导致组件之间的紧耦合,使得代码难以测试、修改和维护。而使用依赖注入可以通过将组件的依赖项从组件内部移到外部管理,从而解耦组件之间的关系。

    在依赖注入中,组件不再负责创建或管理它们所依赖的对象,而是通过外部的方式将依赖项注入到组件中。这样做有几个优点:

    松耦合:依赖注入使得组件之间的依赖关系变得松散,从而使得代码更易于理解、修改和维护。

    可测试性:由于依赖项是通过参数传递或者其他外部方式注入的,因此可以轻松地替换依赖项,从而方便进行单元测试和集成测试。

    可重用性:依赖注入可以提高组件的可重用性,因为组件不再与特定的实现绑定,而是依赖于抽象接口,从而使得它们可以在不同的上下文中被重用。

    依赖注入可以通过构造函数注入、属性注入或者方法注入等方式实现。其中,构造函数注入是最常见的方式,它通过在组件的构造函数中接受依赖项作为参数来实现注入。

    高阶用法

    /**高阶DI**/

    //创建一个容器

    class container
    {
        public $instance = [];
        public function __set($key, $value)
        {
            $this->instance[$key] = $value;
        }
        //这里是测试__get方法用  注释掉 
        //public function __get($key)
        //{
            // return empty($this->instance[$key]) ? "null" : $this->instance[$key];
        //}
    }

    class adapter
    {
        public $name = '我是调度器';
    }
    $container = new container();
    $container->adapter = new adapter();
    class autoFelix
    {
        private $container;
        public function __construct(container $container)
        {
            $this->container = $container;
        }
        public function who($class)
        {
            return $this->container->instance[$class]->name;
        }
    }

    $autoFelix = new autoFelix($container);
    $who = $autoFelix->who('adapter');
    var_dump($who);

    相关文章

      网友评论

          本文标题:依赖注入(DI)

          本文链接:https://www.haomeiwen.com/subject/qtnezdtx.html