提问者:小点点

Kotlin中的“更喜欢在类上运行dagger处理器”


每当我对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。

这是我该担心的吗?

谢谢.


共1个答案

匿名用户

恐怕你不能。为什么不用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(注释处理工具)就可以了。