我是Kotlin和Dagger的新手。我有一个小问题,我不知道如何解决,我找不到解决方案。
这就是我所拥有的:
@Module
class AppModule (app: Application) {
private var application: Application;
init {
this.application = app;
}
@Provides fun provideApplication(): Application? {
return application;
}
@Provides fun provideResources(): Resources? {
return application.resources;
}
}
@Singleton
@Component(modules = arrayOf(AppModule::class))
interface AppComponent: AppComponentBase {
public class Initializer {
private constructor(){}
companion object {
fun Init(app: Application): AppComponent? {
return DaggerAppComponent.builder().appModule(AppModule(app)).build()
}
}
}
}
AppComponentBase
:这个接口包含了这个组件所需要的所有方法。
现在,问题是,如果我在companion object
中调用DaggerAppComponent.builder().appModule(AppModule(app)).build()
,这个DaggerAppComponent
类不是由Dagger生成的。如果a调用相同的行,任何都是由companion object
dagger生成的,没有任何问题。
另一件事,我没有寻找一个解决方案是创建一个其他不同的类具有相同的结构,并importe DaggerAppComponent
作为内部对象,我同样的结果发生。
我不知道什么有组件的初始化外。所以,有任何其他的解决方案,或者我做错了什么?.
9条答案
按热度按时间nukf8bse1#
您需要在build.gradle中拥有kapt processor:
这个扩展将生成dagger的代码。
此外,对于较新的gradle版本,您还可以在构建中应用该插件。gradle:
您可以检查this project以供参考
bzzcjhmw2#
我不知道这个变化是什么时候发生的,但是在Kotlingradle插件的1.1.2中,你替换了这个(在你的模块的
build.gradle
中):用这个
然后确保将使用
annotationProcessor
的依赖项替换为kapt
。例如,旧的方法是用途:
现在您用途:
y1aodyip3#
Kotlin1.1.4更新
generateStubs
不再起作用。请随意使用最新的Kotlin进行构建,它会在Android Studio的 * 消息 * 部分告诉您不再需要它。以下是Dagger2 for Android和Kotlin的最新依赖项列表axr492tv4#
这个问题可以通过下面的改变来解决,这与最初的答案不同
以下也将很好地解决此问题
带插件
和依赖关系
参考一下这个Gist
mbskvtky5#
如果您使用Kotlin作为Android应用程序开发的主要语言,请使用这些依赖项
sd2nnvve6#
我的案例一定是匕首实现中的某个排除规则
com.mycompany.native
-〉Dagger不生成代码com.mycompany.other
-〉匕首生成代码我在这上面浪费了相当多的时间:-(我希望它能帮助别人!
t30tvxxf7#
对不起,我没有创建一个新的问题,但决定在类似的问题下回答,因为也许有人发现它有用!
我面临着荒谬的问题!使项目不生成匕首文件。它们是在准备运行您的应用程序时生成的!但我试图解决问题数小时,并没有想到简单的尝试点击运行。)))
也许你也面临着同样的问题:无论是«Sync Project with Gradle»还是«Clean»和«Build Project»都不能帮助生成dagger文件。
在第一次运行应用程序后,如果我单击“创建项目”,我的匕首开始生成文件。
arknldoa8#
对于任何在2023年仍在寻找答案的人来说,你只需要以下依赖项:
您需要在包中查找生成的组件,其名称为
“com.yourcompanyname.yourprojectname(debug)”
在java文件夹中。
你不会在java(generated)包中找到生成的dagger文件。
z8dt9xmd9#
如果你有问题与
DaggerComponent
,你应该添加到
build.gradle
,它将为dagger 2
生成kotlin
代码,否则项目将仅在Rebuild
上构建