首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Dagger 2在activity和fragment中注入相同的类对象

Dagger 2是一个Java和Android的依赖注入框架,它可以帮助开发者管理和解决类之间的依赖关系。在activity和fragment中注入相同的类对象,可以通过以下步骤实现:

  1. 配置Dagger 2:首先,在项目的build.gradle文件中添加Dagger 2的依赖项。例如:
代码语言:txt
复制
implementation 'com.google.dagger:dagger:2.x'
annotationProcessor 'com.google.dagger:dagger-compiler:2.x'
  1. 创建依赖对象:在你的应用程序中,创建一个需要在activity和fragment中共享的类对象。例如,我们创建一个名为MyClass的类。
代码语言:txt
复制
public class MyClass {
    // 类的成员和方法
}
  1. 创建依赖注入模块:创建一个依赖注入模块,用于提供MyClass类的实例。例如,我们创建一个名为MyModule的模块。
代码语言:txt
复制
@Module
public class MyModule {
    @Provides
    public MyClass provideMyClass() {
        return new MyClass();
    }
}
  1. 创建依赖注入组件:创建一个依赖注入组件,用于将依赖注入模块和需要注入的activity或fragment关联起来。例如,我们创建一个名为MyComponent的组件。
代码语言:txt
复制
@Component(modules = {MyModule.class})
public interface MyComponent {
    void inject(MyActivity activity);
    void inject(MyFragment fragment);
}
  1. 在activity和fragment中进行注入:在需要使用MyClass类对象的activity和fragment中,使用@Inject注解将其注入。例如,在MyActivity中注入MyClass对象。
代码语言:txt
复制
public class MyActivity extends AppCompatActivity {
    @Inject
    MyClass myClass;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        // 创建依赖注入组件
        MyComponent myComponent = DaggerMyComponent.builder()
                .myModule(new MyModule())
                .build();

        // 注入MyClass对象
        myComponent.inject(this);

        // 使用myClass对象
        // ...
    }
}

MyFragment中进行注入的步骤与MyActivity类似。

这样,通过Dagger 2的依赖注入机制,我们可以在activity和fragment中注入相同的类对象。这种方式可以提高代码的可维护性和可测试性,同时减少了手动管理依赖关系的工作量。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Dagger Android支持库(译文)

与其他依赖注入框架相比,Dagger 2 最大优点是他不使用反射,严格生成实现,这意味着他可以使用在 Android 应用上。但是Android上使用仍有一些注意事项。...使用Dagger编写Android应用程序一个主要困难是,许多Android框架都由操作系统本身实例化,如ActivityFragment,但如果Dagger可以创建所有注入对象,则效果最佳。...注入 Activity 对象 应用程序组件安装 AndroidInjectionModule,以确保这些基本类型所需所有绑定都可用。...而不需要第2第3步,添加一个返回活动抽象模块方法,使用@ContributesAndroidInjector对其进行注释,并指定要安装到子组件模块。...您自己代码创建BroadcastReceiver时,使用构造函数注入。 支持库 对于Android支持库用户,dagger.android.support 包存在相同类型。

94830

Android--Hilt入门

、构造函数注入 Dagger相同,Hilt也分两种注入方式,以上篇Dagger代码为例子,来对比两个框架使用区别 1.gradle配置依赖 工程gradle中导入插件: dependencies...fun index(): Call } 3.定义模块 Dagger相同使用@Moudle注解就可以表示一个模块,使用@Provides注解提供给Component生成注入对象方法...使用SingletonComponent对应作用域@Singleton即可,使用方法也是Dagger相同 @InstallIn(SingletonComponent::class) //表示全局组件...,@Qualifier注解相当于为其取了个别名,使用对象注入时也相应使用@Qualifier注解,即可得到对应注入对象 5.1 @Named解决注入冲突 @Named注解源码使用了@Qualifier...中注入,直接可以通过注入获取Activity对象 以上面接口实现为例子 1.构造方法中使用@ActivityContext注解注入Context 除了@ActivityContext,还可以通过

1.4K20

详解Kotlin 中使用配置 Dagger2

, // 注入 Activity Module FragmentModule::class, // 注入 Fragment Module ...... Dagger2 2.11 版本之前,项目中每添加一个 ActivityFragment 等组件,都要新建一个对应 Subcomponent 接口,并添加到对应 Module ,并且添加相应方法...'com.google.dagger:dagger-android-processor:2.12' // Dagger 2 注解处理 Android 支持 ... } 然后,注入 Activity...("1", "2") // 与之类似的还有 arrayListOf() 、 setOf() 等,以后详细说明 // 对象 A::class // 相当于 Java A.class,同时还有...A.javaClass 相当于 Java A.getClass() 最后 今天 Kotlin Dagger2 使用就讲到这里,接下来我还会为大家带来更多 Kotlin 相关语法知识以及基封装等

1.3K30

带你解析Dagger2

Dagger2具有以下好处: 1) 依赖注入配置独立于组件之外,注入对象一个独立、不耦合地方初始化,这样改变注入对象时,我们只需要修改对象实现方法,而不用大改代码库。...Dagger2注解解释: 接下来介绍Dagger2每一个概念: @Inject: 通常在需要依赖地方使用这个注解。换句话说,你用它告诉Dagger这个或者字段需要依赖注入。...scope例子,我们用自定义@PerActivity注解一个,所以这个对象存活时间就和 activity一样。...Activity Module: 在对象图中,这个module把activity暴露给相关联。比如在fragment使用activitycontext。...这在Androidactivity或者fragment使用成员变量注入会经常遇到,因为我们没有它们构造方法中使用。 看一下我们是如何在BaseActivity中注入一个成员变量。

68740

Hilt三问—你了解依赖注入

具体主要有以下几点: 依赖注入库会自动释放不再使用对象,减少资源过度使用配置 scopes范围内,可重用依赖项创建实例,提高代码可重用性,减少了很多模板代码。 代码变得更具可读性。...易于构建对象。 编写低耦合代码,更容易测试。 Hilt是啥,怎么用? 很明显,Hilt就是一个依赖注入库,一个封装了DaggerDagger基础上进行构建一个依赖注入库。...用于提供依赖,也就是代表这个会用到注入实例。 @Inject。这个注解是用来告诉 Hilt 如何提供该类实例,它常用于构造函数、非私有字段、方法。 Hilt支持哪些依赖注入。...如果是其他Android,必须在它依赖Android添加同样注解,例如在 Fragment 添加@AndroidEntryPoint注解,必须在Fragment依赖Activity上也添加...2)如果是需要注入第三方依赖,可以使用@Module注解,使用 @Module注解普通,在其中创建第三方依赖对象

1.1K00

如何使用MVP+Dagger2+RxJava+Retrofit开发(1)

构造实例时候,就知道从哪里去找到需要依赖 Provide--modules,我们定义方法是用这个注解,以此来告诉Dagger我们想要构造对象并提供这些依赖。...scope例子,我们用自定义@PerActivity注解一个,所以这个对象存活时间就和 activity一样。...抽象出视图中公共行为,可以activity或者fragment实现BaseView子类,渲染界面; public interface BasePresenter { //订阅...总结 创建module,一般应用于第三方包对象或者应用对象 创建Component,依赖注入器,复杂把注入对象注入到注解成员变量 构造方法注入构造方法前面注释@Inject 成员变量注入:...成员变量(非私有)前面注释@Inject 开始注入调用注射器Inject方法 详解Dagger2 Android官方MVP架构示例项目解析 dagger2 让你爱不释手

1.5K80

快刀斩乱码—— Dagger2没有想象那么难

这篇文章并不是讲解Dagger2基础使用,而是通过讲解它使用以及套路,帮助大家更好理解如何高效使用Dagger2,相信大家看完,一定会对Dagger2理解更加深刻!...关于Dagger2这种依赖注入框架好处在这只简单提一下 依赖注入配置独立于组件之外 依赖对象一个独立、不耦合地方初始化。当初始化方式改变时候修改代码少。...采用这个DaggerOnlyInjectComponent就能完成依赖对象注入。可以ActivityonCreate方法调用如下代码,初始化注入。...我们常规理解单例是虚拟机只有一个对象。而我们这个依赖实例其实只是每次都由同一个Component注入对象提供。如果重新生成一个Component对象注入依赖实例就不再是同一个。...UserComponent: 继承于ActivityComponent组件,通常会在Activity内部Fragment使用

1K20

上手指南 | Jetpack Hilt 依赖注入框架

Jetpck Dagger-Hilt 依赖注入是什么 一个里面有一个变量,这个变量就是这个依赖。然后通过外部注入对这个变量进行赋值,这种就叫做依赖注入。...生命周期,他是 App 父组件,提供访问其他组件依赖 Application 配置好后,就可以使用 Hilt 提供组件了;组件包含 Application,ActivityFragment...需要在 fragment actvity 都使用这个注解。 但是如果 activity fragment 没在同一个module,就会报错。...查找了一些资料: 主要问题之一是,通过 Hilt 中发现模块方式,无法区分哪些模块属于应用组件(如果他们确实使用过 Hilt) 已经库或其他库组件 另一个问题是,他将预先构建组件层次结构变得复杂混乱...Hilt 好处 降低 Android 开发者使用依赖注入框架上手成本 内部有一套标准组件作用域,对范围进行声明后,只能使用在指定作用域中使用这个,并且提供声明周期管理,会自动释放不在使用对象

1.6K20

上手指南 | Jetpack Hilt 依赖注入框架

Jetpck Dagger-Hilt 依赖注入是什么 一个里面有一个变量,这个变量就是这个依赖。然后通过外部注入对这个变量进行赋值,这种就叫做依赖注入。...生命周期,他是 App 父组件,提供访问其他组件依赖 Application 配置好后,就可以使用 Hilt 提供组件了;组件包含 Application,ActivityFragment...需要在 fragment actvity 都使用这个注解。 但是如果 activity fragment 没在同一个module,就会报错。...查找了一些资料: 主要问题之一是,通过 Hilt 中发现模块方式,无法区分哪些模块属于应用组件(如果他们确实使用过 Hilt) 已经库或其他库组件 另一个问题是,他将预先构建组件层次结构变得复杂混乱...undefined Hilt 好处 降低 Android 开发者使用依赖注入框架上手成本 内部有一套标准组件作用域,对范围进行声明后,只能使用在指定作用域中使用这个,并且提供声明周期管理,会自动释放不在使用对象

1.6K30

Dagger2轻松愉悦解析

由 @Inject 指向需要构成注入环境。 由 @Module 提供生成对象所需参数。(一般是 @Inject 注解对象,其构造函数无法添加 @Inject时使用。)...@Inject指定需要注入环境,如下方图2,TasksActivity mTasksPresenter 是被Inject注解对象,同时TasksPresenter 构造函数也被Inject..., 如下图3,这是由Dagger2自动编译生成,这个工厂用于提供实例化,其中get()方法便是注入时被调用。...很明显注入mTasksPresenter对象就是Activity生命周期,而Fragment生命周期无关,并且由于Dagger2内部限定,Scope可以更好规范ModuleComponent生命周期...LazyRecyclerAdapter :个人在这个开源项目包含有Dagger2javakotlin使用demo。 ? 熟悉口味

48410

Jetpack Hilt 依赖注入框架上手指南

,并在运行时注入到对应字段,就是依赖注入,目的是为了解耦 例子:A 中用到了 B ,一般情况下需要在 A new B() 实例对象 采用依赖注入后, A 定义一个私有的 B...并在运行时候通过从相关容器获取出来 B 对象注入到 A 字段。 这样做好处是什么? 如果有很多个需要使用 B 。难道都要在各自中进行 new B() 吗。...这样对后期维护管理都是不方便使用 依赖注入则就变得很简单了。 Hilt 是什么 Hilt 是 Android 依赖注入库,其实是基于 Dagger 。...,他是 App 父组件,提供访问其他组件依赖 Application 配置好后,就可以使用 Hilt 提供组件了;组件包含 Application,ActivityFragment,View...需要在 fragment actvity 都使用这个注解。 但是如果 activity fragment 没在同一个module,就会报错。

1.4K20

Dagger 到 Hilt,谷歌为何执着于让我们用依赖注入

这些都属于由外部来提供依赖初始化,所以都是依赖注入,并不是非要像 Dagger 那样使用注解像魔法一样才叫依赖注入。也就是说,其实我们每个人都已经使用依赖注入了。...例如在 Dagger 里,你要对某个依赖进行注入,你需要手动获取依赖图执行注入依赖操作: ? 而在 Hilt 里,注入会自动完成: ?...而如果用 Hilt,你也可以把它做成自动注入依赖: ? 还有些对象是局部共享,比如某个 Activity 会把一些显示用数据共享给它内部一些 View Fragment。...这一情况我们做法通常是获取外部 Activity 对象然后强转,再去拿它内部对象: ? 而如果用 Hilt,你可以把这个对象直接声明出来,让它自动注入: ?...除了共享对象,不共享也可以用依赖注入方式来进行初始化,因为依赖注入作用除了对共享对象提供一致性支持,也可以让我们创建任何对象时候省一些思考力气: @Inject newUser: User

1.2K20

解决android viewmodel 数据刷新异常问题

刚开始使用 dagger2 + DataBinding 结构,很多东西也不是很清晰。 现象 一个页面有三块布局,我使用一个Activity搭配三个Fragment实现。...通过三个Fragment共同使用ActivityViewModel来实现数据共享。 但是最后出现个现象就是只有刚进入页面时,ViewModel数据会显示视图上。...原因 千辛万苦找到了是因为项目中使用Dagger2 在给三个Fragment注入 Activity ViewModel 时,实际上是注入了三个 ViewModel 对象 导致每个Fragment...原因:@Singleton AppComponent 上声明了,@Singleton 并不是设计模式单例模式,而是 Dagger2 为了保证 module 提供产品,一个 Scope (Component...如上,表示了三个 Module AppComponent 这个scope是单例 解决3 既然外层已经使用了 @Singleton ,那么我们可以自定义一个注解来表示一个 scope 创建注解:

1.3K21

Hilt-依赖注入框架上手指南

对于Android开发者来说,Hilt可以说专门为Android 打造,提供了一种将Dagger依赖项注入到Android应用程序标准方法,而且创建了一组标准组件作用域,这些组件会自动集成到Android...,需要将 @Inject 添加到要注入构造函数。...组件(Compenent)生命周期 它限制了创建组件生成组件范围绑定生命周期 它指示合适可以使用成员注入值。...: 'dagger.hilt.android.plugin' 举个: 我们有一个 NetDataSource 远程数据,然后我们可能需要在Activity调用,代码如下 class NetDataSource...注意:Kotlin,仅包含@Provides函数模块可以是object。这样,提供程序就可以得到优化,并且几乎可以内联在生成代码

1.6K10

看到如此多MVP+Dagger2+Retrofit+Rxjava项目,轻松拿star,心动了吗?

Dagger2 连接起来, 绝不是简单使用) 全局监听整个 App 所有 Activity 以及 Fragment 生命周期 (包括三方库), 并可向其生命周期内插入任意代码 全局监听 Http...Dagger2Google根据SquareDagger1出品依赖注入框架,通过Apt编译时生成代码,性能优于使用运行时反射技术依赖注入框架....RxlifecycleAndroid上使用rxjava都知道一个坑,就是生命周期解除订阅,这个框架通过绑定activityfragment生命周期完美解决....,这里可以稍微粗力度定义MVP,即无需每个FragmentActivity(每个页面)都定义不同MVP,可以按照相同业务逻辑使用一组MVP 2.4.1...需要ModelView,都使用Dagger2注入,这样即解藕又方便测试,怎么注入?

2.8K30

Jetpack新成员,一篇文章带你玩转Hilt依赖注入

答案就是Dagger2。 是的,Dagger2海外是非常受到欢迎广泛认可技术栈,如果你能用得一手好Dagger2,基本也就说明你是水平比较高开发者了。...既然是安装到了Activity组件当中,那么自然Activity是可以使用由这个模块提供所有依赖注入实例。...另外,Activity包含FragmentView也可以使用,但是除了ActivityFragment、View之外其他地方就无法使用了。...如果想要在某个Activity,以及它内部包含FragmentView中共用某个对象实例,那么就使用@ActivityScoped。以此类推。...你可能会好奇,这个包含关系是如何确定,为什么声明成@ActivityScopedFragmentView也可以进行依赖注入? 关于包含关系定义,我们来看下面这张图就一目了然了: ?

2.5K30

Android Hilt实战初体验: Dagger替换成Hilt

Hilt通过为项目中每个 Android 提供容器并自动管理其生命周期,提供了一种应用中使用 DI(依赖项注入标准方法。...Hilt与Dagger主要目标都是一致: 简化 Android 应用 Dagger 相关基础架构。 创建一组标准组件作用域,以简化设置、提高可读性以及应用之间共享代码。...提供一种简单方法来为各种构建类型(如测试、调试或发布)配置不同绑定。 但是Android中会实例化许多组件,例如Activity,因此应用中使用Dagger需要开发者编写大量样板代码。...它将替代DaggerAppComponent。 Android 对于Android使用Dagger时需要定义SubComponent并将它依赖到Application。...我们不要忘了它本质,它是Dagger之上建立,本质是为了帮助我们减少不必要样板模板,方便开发者更好使用依赖注入Hilt,上面的实现会自动帮我们生成,所以才会使用起来这么简单。

1.6K20

Kotlin 中使用 Hilt 开发实践

完成安装全部依赖插件以后,仅需 Application 之前添加 @HiltAndroidApp 注解即可开始使用 Hilt,而无需其它操作。...class OatMilk @Inject constructor() { ... } ⮕ 使用模块 Hilt 另外两种将转为可注入方法是使用模块。...请注意作为字段注入依赖项场景仅仅适合必须包含无参构造函数情况,比如 Activity大多数场景下,您更应通过构造函数参数来注入依赖项。...作用域同样决定了注入实例生命周期: 本例,被 Fridge LatteActivity 使用 Milk 单独实例会在 LatteActivity onCreate() 被调用时候被创建...任何可被注入内容均可以封装在 Provider 使用 provider 注入方式。 依赖注入框架 (像 Dagger Guice) 通常被用于大型且复杂项目。

1K30

Android 面试题:为什么 Activity 都重建了 ViewModel 还存在?—— Jetpack 系列(3)

Dagger2:从 Dagger2 到 Hilt 玩转依赖注入(一)[7] 11、Hilt:从 Dagger2 到 Hilt 玩转依赖注入(二) 12、OnBackPressedDispatcher:...ViewModel 作用可以区分 2 个维度来理解: 1、界面控制器维度: 最初 MVC 模式Activity / Fragment 承担职责过重,因此,在后续 UI 开发模式,我们选择将...,虽然可以使用依赖注入普通对象方式注入 ViewModel,但是这相当于绕过了 ViewModelProvider 来创建 ViewModel。...基于以上考虑,Activity 是支持设备配置变更重建时恢复 第 2 - 非配置数据 ,源码存在 NonConfiguration 字眼代码,就是与这个机制相关代码。...:模块化微型 Activity: https://juejin.cn/post/6970998913754988552 [7] 10、Dagger2:从 Dagger2 到 Hilt 玩转依赖注入(一

1.1K20
领券