TL; DR版本
您能否向“爱好者”程序员解释依赖注入的概念?对编程有基本的了解。即类,函数和变量。
依赖注入的目的是什么,它纯粹是一种可读性/易编程概念还是它还提供了编译时间的好处?
我原来更加华丽的版本!
我的编码技巧相当简陋。 (这不是我的主要技能,但它有时会派上用场来证明概念的某些东西)我可以把东西放在一起并使事情有效,但我总是完全清楚有很多更好的东西/更有效的做事方式。
主要是我在函数,类和变量之间蹦蹦跳跳! (就像我很久以前在c64上学到的那样!)
依赖注入似乎最近到处都是,虽然我觉得我有点理解,但我觉得我错过了一点(或者其他什么)
问题似乎是当我试图谷歌来了解它在基础层面上是什么时,它很快变得非常复杂并且我的头部受伤(我是一个非常小的大脑和大词混淆了我!)
所以我希望有人可以向五岁的孩子解释依赖注射!它是什么,为什么我需要它,它如何使我的编码更好。 (理想情况下,在函数,类和变量的概念中工作!)
这在很大程度上与语言无关,它似乎是所有语言都使用的东西,但我选择的语言通常是C#(通常是ASP / MVC,虽然是一些原生Windows /控制台),尽管我最近开始探索还有Nodejs。
实际上这似乎是这个问题的重复 - What is dependency injection?
(比我的版本好得多! - 这就是我对胡扯的看法)
答案 0 :(得分:2)
依赖注入允许开发人员将类引用放入项目中而不必将其创建为对象。
对于spring,我最熟悉DI的情况,我想在 config.xml 文件中的类路径,我可以将这个类引用传递给我需要它的任何类叫做。注入的类就像一个单例,因为只传递了一个引用,而没有将它声明为单例。它通常是一个注入的服务类。
依赖注入允许客户端灵活地进行配置。只修复了客户端的行为。这样可以节省更换xml文件中注入内容的时间,而无需重新编译项目。
这就是为什么我说它更像是仅使用一个实例的单身人士
public class Foo {
// Constructor
public Foo() {
// Specify a specific implementation in the constructor instead of using dependency injection
Service service1 = new ServiceExample();
}
private void RandomMethod() {
Service service2 = new ServiceExample();
}
}
这里一次使用一个服务,因为创建了两个实例。我已经看到了类文件变得如此之大的项目,其中服务类在不同方法中通过一个类创建了三次。
public class Foo {
// Internal reference to the service
private Service service1;
// Constructor
public Foo(Service service1) {
this.service1 = service1;
}
}
可以在第二个示例中创建相同的issuse,但是通过在构造函数中包含所有依赖项,对于查看代码正在使用的内容的开发人员而言,这使得服务已经从启动。
答案 1 :(得分:1)
Code Injection
可能有不同的含义。
例如,在security
上下文中,它可能意味着恶意代码被注入您的应用程序(例如sql-injection)。
在其他情况下(例如aspect-oriented programming),它可能意味着使用附加代码修补方法的方法。
Dependency Injection是不同的东西,意味着一部分代码(例如一个类)以一种模块化的方式访问依赖项(代码的其他部分,例如其他类,它依赖于它)被硬编码(因此他们可以自由地改变或被覆盖,甚至可以根据需要在其他时间加载)