跳至内容
深圳市捷比信实业有限公司 · 产品选型与采购咨询联系业务人员
取样电阻捷比信 · 专业器件主题站

案例解决方案依赖性注入和控制反转

什么是依赖注入?依赖注入(DependencyInjection)是一个过程:客户端类仅依赖于服务类的接口,而不依赖于特定的服务类,因此客户端类仅定义一个注入点。在程序运行期间,客户端类不会直接实例化特定的服务类实例,但是客户端类或特殊组件的运行上下文负责实例化服务类,然后将其注入客户端类以确保正常客户端类的操作。什么是控制反转在解释什么是控制反转之前,让我们在上一篇博客文章的评论中介绍博客作者提出的问题:依赖注入和控制反转是否是同一件事?我认为,控制反转概念的最终实现取决于依赖和依赖注入的实现。控制反转只会改变高电平和低电平之间的关系。过去,在实现功能时,低级模块可能依赖于高级模块。通过控制反转,低级模块可以依赖接口。如果此时高级模块使用低级模块,则必须实现此接口,然后将高级模块的实现类注册到低级模块以通过依赖项注入来使用。上面的解释可能会造成混淆,我将使用一个示例来进一步介绍控制反转的设计模式。一个了解控制反转的例子。从上图可以看出,驾驶员依赖于两类“汽车”。和“火车”。如果驾驶员需要驾驶汽车,则需要实例化汽车类别,如果需要驾驶火车,则需要实例。变成火车课程//驾驶汽车cat = new car(); cat.Stop(); //省略驾驶火车。 。如果我们说此时需要飞行飞机怎么办?传统方法是创建一个新的飞机类别,然后驾驶员可以直接实例化飞机类别。我们暂时将以上图片的框架称为“自动驾驶系统”。现在,“自动驾驶系统”被称为“自动驾驶系统”。具有自动驾驶汽车,飞机和火车的功能。您认为它已经非常强大,因此您可以将该系统出售给某家公司,但该公司的业务不限于前三辆车。现在,该公司希望认识到驾驶员可以驾驶飞船。如下图所示,您可以看到,如果我们的“自动驾驶系统”要实现这一点,如果您驾驶太空飞船,则需要驾驶员创建一个“太空飞船”。目的。目前,我们的框架仍然依赖于外部(因为飞船类在客户端)。这就是我们经常说的低级模块依赖于高级模块。这种依赖绝对是不可接受的。随着客户的变化,我们必须更改我们的框架。这种方法绝对是不可接受的。我们继续发展。现在我们的驱动程序不直接依赖于特定的实现类,还依赖于接口,但是此时上面的图片暴露了一个问题,希望您不要阅读下面的文字,您可以考虑一下图片中的内容以下。问题。 (上图中的三辆车和接口之间的关系没有正确识别,应该是实现的)尽管上图的设计解决了不使用“新建”特定对象的问题,但还出现了一个新问题:实现是由驱动程序使用的?班级?每个人都知道不能直接实例化接口,并且只能实例化接口的特定实现类。好的,为了解决这个问题,我们继续改进上图。我们使用工厂模型。此时,关系是驱动程序依赖于工厂类,并且工厂类创建特定的实现类。根据上图,让我们看一下如果我们意识到驾驶航天器,它们之间的关系将如何变化(上图中三辆车与界面之间的关系是错误的,应该实现)。两者之间的关系已经完全改变。低级模块(框架)曾经依赖于高级模块,但是现在高级模块取决于低级模块。从上面的图片可以看出,无论您是要驾驶太空飞船还是火箭,只要您实现“运输工具”就可以了。界面,然后我可以在工厂类中创建它。这不仅增加了系统的可伸缩性,而且提高了系统的整体健壮性。最后,总结什么是控制反转,我在开始时就给出了答案