代码之家  ›  专栏  ›  技术社区  ›  Abdurakhmon

什么是DI容器?

  •  4
  • Abdurakhmon  · 技术社区  · 6 年前

    我正在看这个关于依赖注入的课程视频 di-container 但没有详细解释,现在我读了一些文章,我想确认一下,现在我得到了正确的答案。下面是一个简单的程序,我的问题是,

    下面的程序类是一种最简单的DI容器吗?如果不是,那么简单的di容器会是什么样子

    interface  Implementable {
        void doSmth();
    }
    
    class A implements Implementable {
    
        @Override
        public void doSmth() {
    
        }
    }
    
    class B {
    
        private Implementable i;
    
        public B(Implementable implementable) {
            this.i= implementable;
        }
    
        public void doSmth(){
            i.doSmth();
        }
    }
    

    这是DI类集装箱吗?

    class Program {
        B b = new B(new A());
        b.doSmth();
    }
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Steven    5 年前

    根据 Dependency Injection Principles, Practices, and Patterns ,DI容器是:

    一个软件库,它提供DI功能,并允许自动化涉及的许多任务 对象合成 , 拦截 终身管理 . DI容器 也被称为控制反转(ioc)容器。 (第3.2.2节)

    至少,DI容器允许自动布线,即:

    抽象 通过使用编译器和公共语言运行库提供的类型元数据来实现具体的类型。 (附注12 1.2)

    这通常意味着DI容器将分析类型的构造函数并将依赖项注入其中,而无需手动指定每个构造函数参数。

    从这个角度来看, Program 类是 DI容器。 程序 扮演你的角色 Compositoin Root ,这是:

    应用程序中模块组合在一起的(优选)唯一位置。 (4.1)

    在你特定的词根中,你在练习 Pure DI ,这是使用 new 语言的关键字,与使用DI容器相反。