2013-08-20 17 views
15

Projem üzerinde çalışıyorum Dagger almaya çalışıyorum. Ben derleme sırasında benim sınıfların birinde şu istisna olsun AncakVarsayılan kuruculardaki hançer

:

error: No injectable members on Foo. Do you want to add an injectable constructor?

Ancak, sınıf hiçbir bağımlılıkları ve gibi varsayılan no-arg yapıcı kullanır:

public class Foo 
{ 
    ... 
} 

Aşağıdaki gibi enjekte edilebilir bir no-arg kurucu eklemem gerekir mi?

public class Foo 
{ 
    @Inject 
    public Foo() 
    { 
    } 

    .... 
} 

cevap

21

Hançer aktif ya bir hayır-args yapıcı ekleme veya enjekte edilebilir bir alan ekleyerek enjektabl sınıfa @ Enjekte eklemenizi gerektirir. ama Guice ve diğer çerçeveler, JIT ile deneyimden rastgele sınıfların bağlanma boğulmuş olarak çıkıyor,

@Module(...) 
class MyModule { 
    @Provides Foo provideFoo() { 
    return new Foo(); // Foo is not injectable. 
    } 
} 

Bu ekstra boilerplate gibi görünüyor: Üçüncü seçenek şöyle bir @Provides yönteminden sınıf döndürmektir hata. Biz java.lang.String şeyleri enjekte gördük ve birileri onu bağlamak için unuttum çünkü, istediğiniz dizge yerine "" enjekte ile sona erdi. Hançer, bu nedenle, bir Inject constructor veya field gerektirir. (Guice, isteğe bağlı olarak bunu, geriye doğru uyumluluk için 4x'te buna sahiptir, varsayılan olarak kapalıdır)

Bu, Dagger'ın daha fazla doğruluk garantisi seçtiği nadir bir durumdur. Bazı küçük miktarlarda verim pahasına.

İlgili konular