Kotlin'de "Bunun yerine hançer işlemcisini o sınıf üzerinde çalıştırmayı tercih edin"


124

Bir kotlin sınıfına enjekte ettiğimde bu notu yapıda alıyorum (btw, hem kotlin hem de java ile karışık bir android projem var).

Örneğin, bu compileStagingDebugJavaWithJavacaşamalı görevden sonra: (StagingDebug benim derleme varyantımdır), şu mesajı alıyorum:

"Not: com.packageNameXXX.CourseDiscoveryMapFragment için MembersInjector veya Factory üretiliyor. Bunun yerine hançer işlemcisini bu sınıf üzerinde çalıştırmayı tercih edin."

Benim CourseDiscoveryMapFragment kodu burada görülebilir:

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)
}

Ve ActivityComponent'ım :

@ActivityScope
@Subcomponent(modules = ActivityModule.class)
public interface ActivityComponent {

    void inject(BaseActivity baseActivity);

    void inject(CourseDiscoveryMapFragment fragment);

    //Exposed to sub-graphs.
    Activity activity();
}

Bu yüzden, Kotlin'de hançer enjeksiyonları yaparken Java ile yazılmış hançer bileşeni ve modülleri alıyorum.

Bu endişelenmem gereken bir şey mi?

Teşekkür ederim.


Tüm hatayı / uyarıyı ve ayrıca onunla ilgili kodu gönderebilir misiniz?
marcospereira

4
Sorunun daha fazla ayrıntıya ihtiyacı var. Temelde soru olarak bir google sorgusu yazdınız.
Jayson Minard

@marcospereira Yeniden düzenlendi! Teşekkürler!
Fábio Carballo

4
Hey, bir çözüm buldun mu yoksa belki bu uyarı için bir sebep mi?
wojciech_maciejewski

Yanıtlar:


5

Korkarım yapamazsın. Neden Kotlin'de bağımlılık modülleri yazmıyorsunuz?

Java'da bağımlılık modülleri yazmak için, Gradle komut dosyanızı şu şekilde yapılandırmanız gerekir:

 compile 'com.google.dagger:dagger:2.8'
 apt 'com.google.dagger:dagger-compiler:2.8'

Ancak Kotlin'de bağımlılık modülleri yazmak için Gradle betiğinizi şu şekilde yapılandırmalısınız:

compile 'com.google.dagger:dagger:2.8' 
kapt 'com.google.dagger:dagger-compiler:2.8'

dagger, derleme işlemi sırasında bağımlılık kodunu oluşturmak için açıklama işleme aracına ihtiyaç duyar. Bu yüzden doğru dile göre doğru APT'yi (açıklama işleme aracı) kullanmanız gerektiğini tahmin ediyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.