美文网首页jetpack...
hilt-模组管理器提供方注入

hilt-模组管理器提供方注入

作者: 黄蜜蜂 | 来源:发表于2023-02-13 00:54 被阅读0次

    实体类的实例注入有两种注入的两种方式:

    • 一种是从实体类构造函数注解的方式注入,如第二章所说,

    • 另外一种就是通过模组管理器提供方注入,具体操作步骤如下:

    application和activity的代码跟第一种同理不用更改,User实体类可以去掉@Inject注解符号,跟往常的实体类写法一样即可,不过需要新建一个模组管理器AppModule,具体代码如下:

    @InstallIn(SingletonComponent::class)
    @Module
    class AppModule {
    
        @Singleton
        @Provides
        fun provideUser(): User {
            return User()
        }
    }
    
    

    首先,@Module声明了模组管理器的类,然后@Provide声明了User实体的实例提供函数,然后重点来了,@InstallIn是指定要在其中安装入口点的组件的注解,其括号里面指定的是需要入口点组件的类,不同的组件类作用域不同,但是有一个必须遵照的规则,安装入口点的组件的作用域一定要与提供方(即User实体)的作用域一致。

    这个规则该怎么理解,要从两方面,一个作用域的绑定关系,一个是如何通过组件绑定关系约束提供方的作用域,实际上就是对实体生命周期的控制。

    下表列出了生成的每个组件的作用域注解:

    image.png

    而生成组件可以从android studio工程的External Libraries里面找到

    image.png

    可以看出来,AppModule绑定SingletonComponent组件的作用域是@Singleton,所以对应提供方的作用域也应该是@Singleton,这是规则限定的,除非提供方不指定作用域,如下图


    image.png

    <pre style="background:white">将提供方的@Singleton去注释掉,因为扩展包里SingletonComponent组件声明的作用域就是Singleton,那模组下的提供方只能是声明Singleton,除非提供方不指定作用域,使用默认的作用域,假如模组安装了ActivityComponent组件,那么User只能声明@ActivityScoped作用域了。

    而作用域对应的生命周期,如下表:


    image.png

    从而这就通过组件在模组管理器上的安装不同组件,间接完成统一管理了各个实体的生命周期,即其活动范围,当然也还可以新建更多的模组区分管理多个实体,这样也更灵活了。

    相关文章

      网友评论

        本文标题:hilt-模组管理器提供方注入

        本文链接:https://www.haomeiwen.com/subject/ybdkkdtx.html