2016-05-11 1 views
2

Я видел этот фрагмент:Является ли метод инъекции зарезервированным именем? как Кинжал-2 знает, как реализовать свое тело?

@Component(modules = {TestActivityModule.class}) 
public interface TestActivityComponent { 
    void inject(TestActivity activity); 
} 

Но метод inject не реализован в пользовательском коде (но автоматически генерируется в Dagger-2 коде).

А именно inject зарезервированное имя? как Dagger-2 знает, как реализовать этот метод?

+0

см: http://stackoverflow.com/questions/31961094/dagger-2-inject-method –

+1

@AhmadAlsanie, я увидел, что она не дает ответа на вопрос – Tar

ответ

2

Хорошо, я понял: имя не имеет значения, оно может быть, например, squeeze, при условии, что при условии, тип содержит @Inject полей (ы)/методы (ы)/Конструктор (ы), Dagger-2 будет генерировать тело метода:

@Component(modules = {TypoModule.class}) 
public interface TypoComponent { 
    void squeeze(Thingie t); 
} 

... и до тех пор, как есть @Provides, что возвращает тип @Inject изд:

@Module class TypoModule { 
    @Provides InjectedType whateverNameYouDecide() { 
     return new InjectedSubType(); 
     // InjectedSubType extends InjectedType, obviously... 
    } 
} 

конечно, Thingie должен иметь @Inject член ред или ничего не случится:

class Thingie { 
    @Inject InjectedType thingieID; 
} 

Вот и вся история ...

+0

В точку. Именование - это просто конвенция и читаемость. Вам не нужно называть его компонентом или модулем, либо –

+0

'inject' (или' squeeze' или что-то еще) является «методом инъекций членов». Контракт задокументирован в [@Component javadoc] (http://google.github.io/dagger/api/latest/dagger/Component.html#members-injection-methods). – gk5885

Смежные вопросы