Разница между областью действия в модулях и компонентах

В чем разница между аннотацией @Singleton в @Component аннотированных классах Dagger2 и @Provides аннотированных методов в модулях?

Если у меня есть один модуль, в котором все методы помечены аннотацией @Singleton, и компонент с той же аннотацией, который включает этот модуль, какова цель этого?

@Singleton
@Component(...)
public interface AppComponent {

    // ...

}

А также

@Provides @Singleton Context provideContext() { return context; }

person Near1999    schedule 09.02.2016    source источник


Ответы (2)


Аннотирование метода @Provides (или класса с конструктором @Inject) сообщает Dagger о необходимости реализовать фактическую функциональность области видимости, в то время как аннотирование компонента (что необходимо) не имеет никакой функциональности, но сообщает Dagger: «Я разрешаю этому компоненту содержать привязки этого сфера". Обратите внимание, что вы все еще можете иметь привязки без области в компоненте с областью действия, но не наоборот.

person rdshapiro    schedule 10.02.2016

Использование аннотаций Java вполне подходит для предоставления документации читателю, что вы, вероятно, и видите в своем первом примере. Это полезно там, чтобы читатель мог узнать предполагаемое использование класса/интерфейса, не зная механизма, с помощью которого создается или управляется его экземпляр.

person Doug Stevenson    schedule 09.02.2016