【问题标题】:Inject custom Application class注入自定义应用程序类
【发布时间】:2023-03-31 11:59:01
【问题描述】:

我正在使用 Hilt 并尝试将我的应用程序注入另一个活动:

@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 已经这样做了。假设我可以注入基本的“应用程序”类,但我想获得我重写的应用程序类。当然不用每次我想使用它时都投射它。

【问题讨论】:

  • 为什么要访问我的应用程序类??

标签: android dagger-2 dagger-hilt


【解决方案1】:

Hilt 只为您提供Application 类实例,该实例在插件重写您的MyApplication 类后播种到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
}

【讨论】:

    猜你喜欢
    • 2015-03-10
    • 2014-12-10
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    相关资源
    最近更新 更多