每当我注入kotlin类时,我都会在构建中得到这个注释(顺便说一下,我有一个带有kotlin和java的混合android项目)。
例如,在此gradle任务之后:compileStagingDebugJavaWithJavac
(StagingDebug是我的构建变体),我收到此消息:
“注意:为com.packageNameXXX.CourseDiscoveryMapFragment生成一个MembersInjector或Factory。更喜欢在该类上运行dagger处理器。”
我的 CourseDiscoveryMapFragment 代码可以在这里看到:
class CourseDiscoveryMapFragment : Fragment(){
@Inject
lateinit var presenter: CourseDiscoveryMapPresenter
lateinit var mapView: MapView
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_discovery_map, container, false)
MapsInitializer.initialize(activity)
mapView = view.mapView
mapView.onCreate(savedInstanceState?.getBundle(BUNDLE_KEY_MAP_STATE))
(activity as BaseActivity)
.activityComponent.inject(this)
}
我的 ActivityComponent 是:
@ActivityScope
@Subcomponent(modules = ActivityModule.class)
public interface ActivityComponent {
void inject(BaseActivity baseActivity);
void inject(CourseDiscoveryMapFragment fragment);
//Exposed to sub-graphs.
Activity activity();
}
所以,我用匕首组件和用Java编写的模块,同时在Kotlin中进行匕首注射。
这是我应该担心的吗?
谢谢。
答案 0 :(得分:5)
恐怕你做不到。为什么不在Kotlin中编写依赖模块?
要在java中编写依赖模块,您需要以这种方式配置Gradle脚本:
compile 'com.google.dagger:dagger:2.8' apt 'com.google.dagger:dagger-compiler:2.8'
但是,要在Kotlin中编写依赖模块,您应该以这种方式配置Gradle脚本:
compile 'com.google.dagger:dagger:2.8' kapt 'com.google.dagger:dagger-compiler:2.8'
dagger需要注释处理工具在编译过程中生成依赖关系代码。所以我想你只需要根据正确的语言使用正确的APT(注释处理工具)。