“ ชอบเรียกใช้ตัวประมวลผลกริชมากกว่าคลาสนั้นแทน” ใน Kotlin


124

ฉันได้รับบันทึกนี้ในการสร้างเมื่อใดก็ตามที่ฉันทำการฉีดลงในคลาส kotlin (btw ฉันมีโครงการ Android แบบผสมที่มีทั้ง kotlin และ java)

ตัวอย่างเช่นหลังจากงาน gradle นี้: compileStagingDebugJavaWithJavac(StagingDebug เป็นตัวแปรการสร้างของฉัน) ฉันได้รับข้อความนี้:

"หมายเหตุ: การสร้าง MembersInjector หรือ Factory สำหรับ com.packageNameXXX.CourseDiscoveryMapFragment ต้องการเรียกใช้ตัวประมวลผลกริชในคลาสนั้นแทน"

รหัส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

นี่คือสิ่งที่ฉันควรจะกังวลเกี่ยวกับ?

ขอบคุณ.


คุณสามารถโพสต์ข้อผิดพลาด / คำเตือนทั้งหมดและรหัสที่เกี่ยวข้องได้หรือไม่?
marcospereira

4
คำถามต้องการรายละเอียดเพิ่มเติม โดยพื้นฐานแล้วคุณเขียนข้อความค้นหาของ Google เป็นคำถาม
Jayson Minard

@marcospereira แก้ไขใหม่! ขอบคุณ!
Fábio Carballo

4
เฮ้คุณพบวิธีแก้ปัญหาหรืออาจเป็นเหตุผลสำหรับคำเตือนนั้น?
wojciech_maciejewski

3
นี่คือคำตอบ: github.com/square/dagger/issues/537
R. Zagórski

คำตอบ:


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'

กริชต้องการเครื่องมือประมวลผลคำอธิบายประกอบเพื่อสร้างรหัสอ้างอิงในระหว่างกระบวนการคอมไพล์ ดังนั้นฉันเดาว่าคุณต้องใช้ APT ที่ถูกต้อง (เครื่องมือประมวลผลคำอธิบายประกอบ) ตามภาษาที่ถูกต้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.