Baj*_*dda 6 android dependency-injection kotlin dagger-2
我试图在我的android应用程序中实现HasActivityInjector,但它显示了HasActivityInjector无法解决。在我在项目中使用的依赖项和插件下面,
apply plugin: 'kotlin-kapt'
Run Code Online (Sandbox Code Playgroud)
和
implementation 'com.google.dagger:dagger:2.16'
kapt 'com.google.dagger:dagger-compiler:2.16'
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试的代码-
class RanoBoilerplateApplication : Application(), HasActivityInjector{
@Inject
lateinit var activityDispatchingAndroidInjector:
DispatchingAndroidInjector<Activity>
override fun onCreate() {
super.onCreate()
DaggerAppComponent.builder()
.application(this)
.build()
.inject(this)
}
override fun activityInjector(): AndroidInjector<Activity> =
activityDispatchingAndroidInjector
}
Run Code Online (Sandbox Code Playgroud)
我不知道我还必须包括哪些其他依赖项才能工作,如果有人以前这样做过,可以帮助我。
在此处找到最新的Dagger 2版本。
快乐的编码:-)
mbo*_*nin 36
如果有人在更新到后来到这里,则将其2.24删除:https : //github.com/google/dagger/commit/3bd8f707cb28fd0c5f3abb4f87658566f8b52c10。
您可以HasAndroidInjector改用。
kur*_*tan 10
In addition to @mbonnin and @Subhan's answer, starting version 2.24, Has{Activity,Fragment,Service,ContentProvider,BroadcastReceiver} are removed.
If you still want to support this old implementation, use version 2.23 which supports both HasAndroidInjector and Has{Activity,Fragment,Service,ContentProvider,BroadcastReceiver}.
here's what it should look like on version 2.24
Application
class ExampleApp: Application(), HasAndroidInjector {
@Inject
lateinit var androidInjector: DispatchingAndroidInjector<Any>
override fun androidInjector(): AndroidInjector<Any> = androidInjector
/..../
Run Code Online (Sandbox Code Playgroud)
Activity
class ExampleActivity: AppCompatActivity(), HasAndroidInjector {
@Inject
lateinit var androidInjector: DispatchingAndroidInjector<Any>
override fun androidInjector(): AndroidInjector<Any> = androidInjector
/..../
Run Code Online (Sandbox Code Playgroud)
Fragment
class MoreFragment: Fragment(), HasAndroidInjector {
@Inject
lateinit var androidInjector: DispatchingAndroidInjector<Any>
override fun androidInjector(): AndroidInjector<Any> = androidInjector
/..../
Run Code Online (Sandbox Code Playgroud)
我的依赖项如下所示:
//Dagger
implementation "com.google.dagger:dagger:${libs.dagger}"
implementation "com.google.dagger:dagger-android:${libs.dagger}"
implementation "com.google.dagger:dagger-android-support:${libs.dagger}"
kapt "com.google.dagger:dagger-compiler:${libs.dagger}"
kapt "com.google.dagger:dagger-android-processor:${libs.dagger}"
Run Code Online (Sandbox Code Playgroud)
该support如果您使用的程序兼容性是需要一个。而 the${libs.dagger}指的是所需的匕首版本(例如 2.16)。在此处阅读有关依赖项的更多信息。
现在回答还为时已晚,但对于匕首世界的新手来说可能有用!
为了避免在Application类中实现多个Dagger接口(例如HasActivityInjector,HasServiceInjector等),它已被HasAndroidInjector取代。现在,您只需要实现HasAndroidInjector,如下所示:
class DaggerExampleApplication : Application(), HasAndroidInjector{
@Inject lateinit var androidInjector : DispatchingAndroidInjector<Any>
override fun androidInjector(): AndroidInjector<Any> = androidInjector
override fun onCreate() {
super.onCreate()
//Your code
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2508 次 |
| 最近记录: |