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

使用Hilt,如何注入一个没有上下文的类?

使用Hilt注入一个没有上下文的类需要以下步骤:

  1. 首先,确保你的项目已经集成了Hilt依赖。在项目的build.gradle文件中添加以下依赖:
代码语言:txt
复制
implementation 'com.google.dagger:hilt-android:2.x.x'
kapt 'com.google.dagger:hilt-android-compiler:2.x.x'
  1. 创建一个需要注入的类,假设这个类是MyClass
  2. MyClass的构造函数上添加@Inject注解,表示需要通过依赖注入来创建该类的实例:
代码语言:txt
复制
public class MyClass {
    @Inject
    public MyClass() {
        // 构造函数
    }
}
  1. MyApplication类上添加@HiltAndroidApp注解,表示该类是Hilt的入口点:
代码语言:txt
复制
@HiltAndroidApp
public class MyApplication extends Application {
    // ...
}
  1. 创建一个Module类,用于提供MyClass的实例。在该类中使用@Provides注解来提供实例:
代码语言:txt
复制
@Module
@InstallIn(ApplicationComponent.class)
public class MyModule {
    @Provides
    public MyClass provideMyClass() {
        return new MyClass();
    }
}
  1. MyApplication类中添加@EntryPoint注解,并指定MyModule类作为入口点:
代码语言:txt
复制
@HiltAndroidApp
public class MyApplication extends Application {
    @EntryPoint
    @InstallIn(ApplicationComponent.class)
    public interface MyEntryPoint {
        MyClass myClass();
    }
    
    // ...
}
  1. 在需要使用MyClass的地方,通过@EntryPoint注解和EntryPointAccessors来获取MyClass的实例:
代码语言:txt
复制
MyClass myClass = EntryPointAccessors.fromApplication(this, MyApplication.MyEntryPoint.class).myClass();

通过以上步骤,你可以成功地使用Hilt注入一个没有上下文的类。请注意,以上示例中的代码仅为演示目的,实际使用时可能需要根据项目的具体情况进行适当调整。

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

相关·内容

Android--Hilt入门

谷歌接管Dagger后,推出了自己Hilt框架,Hilt基于Dagger做了一层封装,大大简化了Dagger使用,定制了一系列规范,并支持Jetpack中部分组件,是一个专门为安卓开发DI框架 一..."com.google.dagger:hilt-android-compiler:$hilt_version" } 2.使用@Inject注解定义需要注入 /** * 模拟本地数据源 */ class...@HiltAndroidApp注解Application,表示注入中间件 Dagger使用是@Component注解表示一个组件,上篇文章也提到过,一个项目对应一个Component就足够了,Hilt...当我们有一个接口,并且有它实现,那么Hilt也可以注入生成该接口。...定义组件都绑定了安卓上下文相关对象,如:在ActivityComponent中注入,直接可以通过注入获取Activity对象 以上面接口实现为例子 1.构造方法中使用@ActivityContext

1.4K20

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

Jetpck Dagger-Hilt 依赖注入是什么 一个里面有一个变量,这个变量就是这个依赖。然后通过外部注入对这个变量进行赋值,这种就叫做依赖注入。...@Inject 使用 @Inject 来告诉 Hilt 如何提供该类实例,常用于构造方法,非私有字段,方法中。...使用 @Module 注解,需要使用 @InstallIn 注解指定 module 范围 增加了 @Module 注解,其实代表就是一个模块,并通过指定组件来告诉在那个容器中可以使用绑定安装...Hilt 不支持中执行依赖注入,在这种情况下可以使用 @EntryPoint 注解进行创建,Hilt 会提供相应依赖。...Hilt 好处 降低 Android 开发者使用依赖注入框架上手成本 内部有一套标准组件和作用域,对范围进行声明后,只能使用在指定作用域中使用这个,并且提供声明周期管理,会自动释放不在使用对象

1.7K20
  • Hilt 实战 | 创建应用级别 CoroutineScope

    手动依赖项注入 在不使用任何库情况下,遵循依赖项注入 (DI) 最佳实践方案来 手动 创建一个应用级别作用域 CoroutineScope,通常会在 Application 中添加一个 CoroutineScope...请参阅 ——* *Hilt 提供组件列表:* 构造方法注入 对于我们可以访问构造方法,构造方法注入一个简单方案来让 Hilt 知道如何提供类型实例,因为我们只需要在构造器上增加 @Inject...此时,Hilt 还不知道如何提供满足要求 CoroutineScope 依赖项,因为我们还没有告诉 Hilt如何处理。 接下来部分将展示如何Hilt 知道应该传递哪些依赖项。...然而 CoroutineScope 是一个外部依赖库提供接口类型,所以我们不能像之前处理 MyRepository 一样使用构造方法注入。...通过本文,您已经了解到如何使用 Hilt 创建一个应用级别的 CoroutineScope 作为依赖项注入如何注入不同 CoroutineDispatcher 实例,以及如何在测试中替换它们实现。

    1K10

    一个小巧PHP防注入

    很多 web 开发者没有注意到 SQL 查询是可以被篡改,因而把 SQL 查询当作可信任命令。殊不知道,SQL 查询可以绕开访问控制,从而绕过身份验证和权限检查。...直接 SQL 命令注入就是攻击者常用一种创建或修改已有 SQL 语句技术,从而达到取得隐藏数据,或覆盖关键值,甚至执行数据库主机操作系统命令目的。...这是通过应用程序取得用户输入并与静态参数组合成 SQL 查询来实现。下面将会给出一些真实例子。...由于在缺乏对输入数据进行验证,并且使用了超级用户或其它有权创建新用户数据库帐号来连接,攻击者可以在数据库中新建一个超级用户。 下面分享一个用于防注入PHP: <?...SQL注入字符 * * @param string $string * @return bool */ public function checkInject

    64810

    Hilt 介绍 | MAD Skills

    还需要额外工作!我们还需要告诉 Hilt 如何处理,当然还是使用注解! 在构造方法上添加 @Inject 注解,告诉 Hilt 怎样创建该类实例。...当变量被添加 @Inject 注解,并且变量所属被添加 @AndroidEntryPoint 注解时,Hilt 会向该类中注入一个相应类型实例。...然而,我们需要让 Hilt 知道如何提供 MusicDatabase 类型实例。为此,我们使用 Hilt 模块。 Hilt 模块是一个被添加了 @Module 注解。...如何通过 Hilt 来实现这一点呢?好吧,毫无疑问,使用一个注解!...绑定 有两种类型绑定: 未限定作用域绑定 : 没有添加作用域注解绑定,例如 MusicPlayer,如果它们没有被装载到模块中,则所有组件都可以使用这些绑定。

    1K10

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

    Jetpck Dagger-Hilt 依赖注入是什么 一个里面有一个变量,这个变量就是这个依赖。然后通过外部注入对这个变量进行赋值,这种就叫做依赖注入。...@Inject 使用 @Inject 来告诉 Hilt 如何提供该类实例,常用于构造方法,非私有字段,方法中。...使用 @Module 注解,需要使用 @InstallIn 注解指定 module 范围 增加了 @Module 注解,其实代表就是一个模块,并通过指定组件来告诉在那个容器中可以使用绑定安装...Hilt 不支持中执行依赖注入,在这种情况下可以使用 @EntryPoint 注解进行创建,Hilt 会提供相应依赖。...undefined Hilt 好处 降低 Android 开发者使用依赖注入框架上手成本 内部有一套标准组件和作用域,对范围进行声明后,只能使用在指定作用域中使用这个,并且提供声明周期管理,会自动释放不在使用对象

    1.6K30

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

    那么下面我们就开始逐步学习如何在各种更加复杂场景下使用Hilt进行依赖注入。 首先一个很容易想到场景,如果我构造函数中带有参数,Hilt如何进行依赖注入呢?...假如Engine字段是一个普通使用这种写法当然是没问题。但问题是Engine是一个接口,Hilt肯定是无法知道要如何创建这个接口实例,因此这样写一定会报错。...但是这又会引出一个问题,OkHttpClient这个是由OkHttp库提供啊,我们并没有这个编写权限,因此自然也不可能在OkHttpClient构造函数中加上@Inject注解,那么要如何对它进行依赖注入呢...那么,如果有个我们想要依赖注入,它又是依赖于Context,这个情况要如何解决呢?...那么你可能又会想到了,没有Context编写权限,那么我们再使用刚才学到@Module方式,以第三方形式给Context提供依赖注入不就行了?

    2.6K30

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

    ,并在运行时注入到对应字段中,就是依赖注入,目的是为了解耦 例子:A 中用到了 B ,一般情况下需要在 A 中 new B() 实例对象 采用依赖注入后,在 A 中 定义一个私有的 B...这样对后期维护和管理都是不方便使用 依赖注入则就变得很简单了。 Hilt 是什么 Hilt 是 Android 依赖注入库,其实是基于 Dagger 。...@Inject 使用 @Inject 来告诉 Hilt 如何提供该类实例,常用于构造方法,非私有字段,方法中。...Hilt 不支持中执行依赖注入,在这种情况下可以使用 @EntryPoint 注解进行创建,Hilt 会提供相应依赖。...Hilt 好处 降低 Android 开发者使用依赖注入框架上手成本 内部有一套标准组件和作用域,对范围进行声明后,只能使用在指定作用域中使用这个,并且提供声明周期管理,会自动释放不在使用对象

    1.5K20

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

    在学习本文之前,假定大家已经了解依赖注入是什么,如果没有了解过,可以先了解概念。Hilt 目的是降低Android 开发者使用依赖注入框架上手成本,但是基本理念大家还是要明白。...相应一些注解如下: @HiltAndroidApp 触发Hilt代码生成,包括适用于应用程序,可以使用依赖注入,应用程序容器是应用程序父容器,这意味着其他容器可以访问其提供依赖项。...@AndroidEntryPoint 其会创建一个依赖容器,该容器遵循Android生命周期 @Inject 用来注入字段,其类型不能为Private 如果要告诉 Hilt 如何提供相应类型实例...使用@Provides告诉Hilt如何获得具体实例 用来告诉Hilt 如何提供不能被构造函数注入类型 每当 Hilt 需要提供该类型实例时,将执行带注释函数函数主体。...,继续代码演示 接着有一个具体实现 BookImpl ,这里我们使用构造函数注入 并且注入了 BookDao 用来处理具体数据存储。

    1.7K10

    带你了解Android Jetpack库中依赖注入框架:Hilt

    通过Hilt,你可以更轻松地管理和提供依赖,显著减少DI样板代码,并提高应用可测试性和可维护性。 Hilt主要概念 1、 Modules:用来定义如何提供实例。...在Hilt中,使用@Module和@InstallIn注解,并使用@Provides方法提供依赖。 2、 Components:Hilt自动生成不同组件来管理不同生命周期。...3、 Inject:用来注入实例。构造函数、字段和方法都可以使用@Inject注解。 4、 Entry Points:用于获取Hilt提供实例。 Hilt基本用法 1....在Hilt中,你可以创建一个带有@Module和@InstallIn注解,并用@Provides方法提供依赖: @Module @InstallIn(SingletonComponent::class...3、 注入点(Injection Site):通过注解确定哪些部分需要注入依赖,并在运行时由Hilt提供实例。

    8610

    Hilt 工作原理 | MAD Skills

    所涉主题 多种 Hilt 注解协同工作并生成代码方式。 当 Hilt 配合 Gradle 使用Hilt Gradle 插件如何在幕后工作以改善整体体验。...在 Hilt 中,对于 Activity,注入器是一个入口点,我们可以使用 EntryPoints 工具获得一个注入实例。...它仅包含一个让我们注入 PlayActivity 实例方法。如果您曾在 Android 应用中使用过 Dagger (不通过 Hilt),您可能会熟悉这些直接在组件上编写注入方法。...路径聚合 最后,让我们看看 Hilt Gradle 插件一个有用功能: 路径聚合。要了解什么是路径聚合,以及为什么需要它,让我们看另一个示例。...我们还关注了 Hilt Gradle 插件,并了解它是如何在幕后使用字节码改写和路径聚合,让 Hilt 使用变得更安全、更轻松。

    1.5K20

    在 Android 中通过 Hilt 进行依赖项注入

    DI (依赖项注入) 是一种在程序设计中被广泛使用技术,非常适合 Android 开发,该技术可以将依赖项提供给,从而让不必自己创建这些依赖。...即使使用了当今许多现有的依赖项注入库,随着您项目越来越大,这些库仍需要大量模板代码,因为您必须手动构造每个及其依赖项,并创建容器用来复用和管理依赖项。...Hilt 实战 为了向您展示 Hilt 易用性,我们将通过一个典型 Android 应用来演示一些快速 DI。...Codelab 我们发布了如下两个 Codelab,手把手教您使用 Hilt: 在 Android 应用中使用 Hilt 将 Dagger 应用迁移到 Hilt 示例代码 您是否想在现存应用中查看如何使用...备忘单 该 备忘单 可以让您快速查看 Hilt 和 Dagger 注解功能差异以及如何使用它们。

    1.8K20

    Kotlin 中使用 Hilt 开发实践

    而上述这两点并不互斥,而且在很多情况下,您既可以注入依赖项同时也包含依赖。 使依赖项可注入 如果需要在 Hilt 中使某个变得可注入,您需要告诉 Hilt 如何创建该类实例。...class OatMilk @Inject constructor() { ... } ⮕ 使用模块 在 Hilt 中另外两种将转为可注入方法是使用模块。...Hilt 模块 就好像 "菜谱",它可以告诉 Hilt 如何创建那些不具备构造函数实例,比如接口或者系统服务。 此外,在您测试中,任何模块都可以被其它模块所替代。...注入依赖 当依赖可注入后,您可以使用 Hilt 通过两种方式: 作为构造函数参数注入; 作为字段注入。...一个典型例子就是 activity,它是由 Android 框架内部创建,而不是由 Hilt 创建。 这些类属于 Hilt 依赖图谱 入口点,而且 Hilt 需要知道这些包含要注入依赖。

    1.1K30

    在 Android 和 Hilt 中限定作用域

    当涉及到 DI (依赖项注入) 时,限定对象 A 作用域为一个容器,则意味着该容器在销毁之前始终提供相同 A 实例。 在 Hilt 中,您可以通过注解将类型作用域限定在某些容器或组件内。...在 Android 中,您不使用 DI 库也可以通过 Android Framework 来手动限定作用域。让我们看看如何手动限定作用域,以及如何改用 Hilt 来限定作用域。...在 Android 中限定作用域 看了上文定义,您可能会有这样异议: 在某个特定使用一个类型实例变量也可以做到限定该变量类型作用域。没错!...如果另一个出于某种原因需要访问这个被限定了作用域变量,每次访问也会获得相同实例。...例如,如果您使用了 Jetpack Navigation 库,则可以将 ViewModel 绑定到 NavGraph 上。 Hilt 提供作用域数量有限。可能没有符合您特定使用场景作用域。

    1.4K20

    哔哩哔哩在Hilt组件化使用 | 技术探索

    依赖注入目的并非为软件系统带来更多功能,而是为了提升组件重用频率,并为系统搭建一个灵活、可扩展平台。...方案介绍 接入Hilt 摘自官方文档 使用 Hilt 实现依赖项注入 首先先声明下dagger.hilt.android.plugin相关plugin。...编译 Application Gradle 模块需要在其传递依赖项中包含所有 Hilt 模块和通过构造函数注入。...Hilt_BangumiDetailActivityV3这个就是一个子业务内DI注入一个实现。...而bundle-kapt这个模块也很不幸,被当做了一个静态模块,变成了一个远端产物,之后即时业务添加了再多注入相关,因为bundle-kapt没有参与编译,所以注入能力就出错了。

    1.1K30

    Hilt 扩展 | MAD Skills

    本文是 MAD Skills 系列 中有关 Hilt 第四篇文章!在本文中,我们将探讨如何编写自定义 Hilt 扩展。 如果您更喜欢通过视频了解此内容,可以点击 此处 查看。...案例: WorkManager 扩展 Hilt 扩展是一个生成代码库,常通过注解处理器实现。生成代码作为构成 Hilt 依赖项注入关系图模块或入口点。...然后,配置 WorkerManager 使用该 factory,从而使 worker 依赖项注入可用。 Hilt 聚合 启用扩展一个关键机制是 Hilt 能够从路径中发现模块和入口点。...通过使用 Hilt 扩展,可以使用在实现上添加注解完成自动生成入口点。扩展可以进一步生成代码以使用入口点,例如由服务实现扩展。...这类似于 @AndroidEntryPoint 为 Activity 创建 @EntryPoint,并创建使用生成入口点在 Activity 中执行成员注入

    79610

    Hilt三问—你了解依赖注入

    所以官方也是为了让我们更好使用依赖注入框架,为我们封装了一个框架——Hilt,今天一起来看看: 依赖注入是啥?为什么需要她? Hilt是啥,怎么用? Hilt支持哪些依赖注入。 依赖注入是啥?...Hilt是啥,怎么用? 很明显,Hilt就是一个依赖注入库,一个封装了Dagger,在Dagger基础上进行构建一个依赖注入库。...Dagger我们都知道是一个早期依赖注入库,但确实不好用,需要配置很多东西,那么Hilt简单到哪了呢?...所有使用HiltApp必须包含一个使用 @HiltAndroidApp 注解 Application,相当于Hilt初始化,会触发Hilt代码生成。 @AndroidEntryPoint。...用于提供依赖,也就是代表这个会用到注入实例。 @Inject。这个注解是用来告诉 Hilt 如何提供该类实例,它常用于构造函数、非私有字段、方法中。 Hilt支持哪些依赖注入

    1.1K00

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

    Hilt 为了防止没听说过小伙伴们一头雾水,首先我们来了解下Hilt是什么? Hilt是Android依赖注入库,可减少在项目中执行手动依赖项注入样板代码。...Hilt通过为项目中每个 Android 提供容器并自动管理其生命周期,提供了一种在应用中使用 DI(依赖项注入标准方法。...:hilt-android-compiler:2.28-alpha" } Application 使用Dagger时,需要一个AppComponent单例组件,项目中其它SubComponent都将依赖于它...我们不要忘了它本质,它是在Dagger之上建立,本质是为了帮助我们减少不必要样板模板,方便开发者更好使用依赖注入。 在Hilt中,上面的实现会自动帮我们生成,所以才会使用起来这么简单。...目前唯一一个比较不理想是对于@Providers使用,构造方法中不能有参数,如果在用Dagger使用时已经有参数了,再转变成Hilt可能不会那么容易。 庆幸是,Dagger与Hilt可以共存。

    1.6K20

    Hilt 稳定版发布 | 更便捷 Android 依赖项注入

    Hilt 是 Jetpack 推荐使用 Android 应用 依赖项注入 (DI) 解决方案,现已 稳定。这意味着 Hilt 已经完全可以在 生产环境 中使用。...此外,Hilt 与 Android 完全集成,可以帮助您自动管理 Android Framework 依赖项关系图生命周期。 让我们通过一个简单示例观察 Hilt 行为!...一些 Dagger 注解也常用于 Hilt,例如 @Inject (告知 Dagger/Hilt 如何提供一个类型实例)。但是 Hilt 要比 Dagger 更便捷。...通过 Hilt 单组件系统,仅一次提供绑定定义,就可以在所有使用该组件中共享。...想要了解更多并开始在您应用中使用,请参阅如下资源: 了解使用依赖项注入收益 了解如何在您应用中使用 Hilt 从 Dagger 到 Hilt 迁移指南 Codelabs 中逐步学习

    1.9K20
    领券