2016-01-22 14 views
108

Bir kotlin sınıfına enjekte ettiğim zaman bu notu yapıyorum (btw, hem kotlin hem de java ile karışık bir android projem var) . Örneğin"Kotu yerine bu sınıfın üzerindeki hançer işlemcisini çalıştırmayı tercih et"

, bu gradle görev sonrası:

"Not: compileStagingDebugJavaWithJavac, bu mesaj çıktı (StagingDebug benim yapı türüdür). Bir MembersInjector veya Fabrika com.packageNameXXX.CourseDiscoveryMapFragment için oluşturuluyor çalıştırmak için tercih Bunun yerine hançer işlemcisinin yerine.

Benim CourseDiscoveryMapFragment kod 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 geçerli: Yani

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

    void inject(BaseActivity baseActivity); 

    void inject(CourseDiscoveryMapFragment fragment); 

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

, ben hançer bileşeni ve modüller Java ile yazılmış yaşıyorum Kotlin'de hançer enjeksiyonu yaparken.

Bu konuda endişelenmem gereken bir şey var mı?

Teşekkür ederiz.

+0

Eğer bütün hata/uyarı ve ayrıca bununla ilgili kod gönderebilir miyim? – marcospereira

+4

Sorunun daha fazla ayrıntıya ihtiyacı var. Temel olarak bir soru olarak bir Google sorgusu yazdınız. –

+0

@marcospereira Yeniden düzenlendi! Teşekkürler! –

cevap

4

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

java bağımlılık modülleri yazmak için bu şekilde Gradle senaryoyu yapılandırmanız gerekir:

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

Ama KOTLIN içinde bağımlılık modülleri yazmak için, bu işe Gradle betik yapılandırmaları gerekir yol:

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

hançer annotati gerek derleme işlemi sırasında bağımlılık kodunu oluşturmak için işleme aracı üzerinde. Bu yüzden doğru dilde doğru APT (ek açıklama işleme aracı) kullanmanız gerektiğini tahmin ediyorum.

1

Ben normalde kaynak yoluna eklenmez çünkü oluşturulan Hançer 2 koduna meşru sınıflar gezinmek izin vermez gradle dosyası

Android Studio varsayılan olarak bazı yapılandırma sorunu sanırım. Ek açıklama Ekleme eklentisi, bu dosyaları IDE sınıf yoluna ekler ve daha fazla görünürlük elde etmenizi sağlar.

annotationProcessor kullanmak için en son gradle sürüme yükseltmek için emin olun

dependencies { 
    compileOnly 'com.google.dagger:dagger-android:2.11' 
    compileOnly 'com.google.dagger:dagger-android-support:2.11' // if you use the support libraries 
    annotationProcessor 'com.google.dagger:dagger-android-processor:2.11' 
    annotationProcessor 'com.google.dagger:dagger-compiler:2.11' 
} 

Kaynak: https://github.com/codepath/android_guides/wiki/Dependency-Injection-with-Dagger-2

İlgili konular