Prism:结语
prism基本功能也已经学完了,在学习过程中遇到过很多问题,其中就有一点条我就一直困惑,那就是:依赖注入
什么是依赖注入:(gpt写的)
依赖注入(Dependency Injection,简称 DI) 是一种设计模式和编程技术,用于实现控制反转(Inversion of Control,IoC)。它通过将对象的依赖项从对象内部移到外部来减少组件之间的耦合,提高代码的可维护性和可测试性。
我的理解:高层原本是依赖于低层,但是为了降低耦合性,我们常常会创建一个接口,让低层与继承这个接口,这样我们最终就是:
高层依赖于抽象,而低层去实现这个抽象
这样还是不行,因为在初始化的时候依旧会new一个对象,低层通过带抽象参数的方法注入其中,new依旧是不解耦的,这时就可以通过控制反转(IOC)去掉new关键字。
下面打个比喻:
传统:A new 一个 B ,也就是A 控制 B
使用控制反转(IOC)后:A就把这个权力反转给了这个容器(prism中注册视图、module等),当A需要B的时候,由容器把B给注入进来(不用new关键字,prism中通过构造函数的方式来注入的),这个就叫依赖注入。总的来说,控制反转与依赖注入是离不开的。
第2个困惑是Prism中注册与注入的区别:
注册 (Registration)
注册是指向依赖注入容器中添加类型及其生命周期的过程。当你注册一个类型时,你实际上是告诉容器如何创建该类型的实例以及如何管理它的生命周期。注册通常发生在应用程序启动阶段,在 Bootstrapper
类的 RegisterTypes
方法中完成。
注册的时机
- 初始化阶段:在应用程序启动时,通常在
RegisterTypes
方法中进行注册。 - 模块加载时:模块可以注册它们自己的类型和服务。
注入 (Injection)
注入是指依赖注入容器在运行时创建对象并为其注入所需依赖项的过程。依赖注入有助于降低组件之间的耦合度,使代码更加灵活和易于测试。
注入的时机
- 构造函数注入:最常用的方式,依赖项通过构造函数传递给对象。
- 属性注入:依赖项通过属性赋值。
- 方法注入:依赖项通过方法参数传递。
在Prism源码中,已经提前向IOC容器注入了如下内容: