我真的很难理解Dagger 2 Dependency注射系统。
我理解使用@Inject
注释告诉Dagger我们需要在这里提供某种类型的实例。
但是,我不理解其他组件的各种角色,例如:@Module
,@Component
,@Provides
以及它们如何协同工作以向适当的实例提供适当的实例依赖性。
有人可以简单而简洁地解释一下吗?
答案 0 :(得分:20)
@Module :模块是其方法提供依赖关系的类,所以我们 定义一个类并用 @Module 注释它,因此,Dagger会知道 在哪里找到依赖项以满足它们的时候 构造类实例。模块的一个重要特征是 它们被设计成一起分割和组合(for 实例我们将看到,在我们的应用程序中,我们可以有多个组合 模块)。
@Component :组件基本上都是注射器,让我们说之间的桥梁 @Inject 和 @Module ,其主要职责是放置 两者一起。他们只是为您提供所有类型的实例 例如,我们必须使用 @Component 注释一个接口 并列出将组成该组件的所有 @Modules ,如果有的话 它们丢失了,我们在编译时遇到错误。所有组件 了解它通过它提供的依赖关系的范围 模块。
@Provide :在模块内部,我们定义包含此注释的方法 它告诉Dagger我们想要如何构建和提供这些 提到的依赖。
我建议你读一下:
我想这有助于理解。
答案 1 :(得分:0)
您可以在此处找到有用的Dagger2示例项目和教程。
答案 2 :(得分:-1)
****为什么使用Android Dependency Injection?****
我们宁愿每次都在我们的活动中实例化SharedPreferences,数据库和网络库,而宁愿在其他位置创建它们的实例,并在需要时将它们注入到我们的活动中。
什么是Dagger 2?
Dagger 2是一个编译时android依赖项注入框架。
以下是Dagger 2中使用的基本注释:
@Module:此类用于构造最终将作为依赖项提供的对象的类。
@Provides:用于Module类中将返回对象的方法上。
@Inject:用于构造函数,字段或方法,表示已请求依赖项。
@Component:Module类未直接向请求它的类提供依赖项。为此,使用了Component接口,它充当@Module和@Inject之间的桥梁。
@Singleton:这表示将仅创建依赖项对象的单个实例。