注入自定义应用程序 class

Inject custom Application class

我正在使用 Hilt 并试图将我的应用程序注入另一个 activity:

@HiltAndroidApp
public class MyApplication extends Application {
...
}

@AndroidEntryPoint
public class MyActivity extends AppCompatActivity {

    @Inject
    protected MyApplication application;
...
}

我收到以下错误:

error: [Dagger/MissingBinding] com.test.MyApplication cannot be provided without an @Inject constructor or an @Provides-annotated method.

我想我可以为 MyApplication 编写提供程序,但我认为默认情况下 Hilt 已经这样做了。假设我可以注入基础“应用程序”class,但我想获得我的覆盖应用程序class。当然没有每次我想使用它时都投射它。

Hilt 只为您提供 Application class 实例,该实例会在插件重写您的 MyApplication class 后植入到 Singleton 组件中。

您可以创建自己的模块,该模块将从 Application 对象进行转换,并通过将模块设置为在 Singleton 组件中工作来重用它。

@Module
@InstallIn(Singleton::class)
class MyApplicationModule {
    @Provides
    fun providesString(application: MyApplication): String {
        return application.toString()
    }

    @Provides fun providesMyApplicationInstance(application: Application) : MyApplication = application as MyApplication
}