Одиночный экземпляр для 2 действий Даггера - PullRequest
0 голосов
/ 29 ноября 2018

Интересно, хорошо ли я это делаю?
Если мне нужен один экземпляр CoffeHelper в MainActivity и SecondActivity,
, я получу:

public class MyApplication extends Application {

    public static CoffeeComponent getCoffeeComponent() {
        return coffeeComponent;
    }

    private static CoffeeComponent coffeeComponent;

    @Override
    public void onCreate() {
        super.onCreate();
        coffeeComponent = createCoffeeComponent();
    }

    private CoffeeComponent createCoffeeComponent() {
        return DaggerCoffeeComponent.builder().build();
    }
}

-

@Singleton
@Component(modules = {CoffeeProvider.class})
public interface CoffeeComponent {

    void provideCoffe(MainActivity mainActivity);
    void provideCoffe(SecondActivity secondActivity);

}

и теперь я могу просто написать в MainActivity и во SecondActivity сделать это:

MyApplication.getCoffeeComponent().provideCoffe(this);

это хорошая практика?

мой модуль:

@Module
public class CoffeeProvider {

    @Provides
    @Singleton
    CoffeeHelper getCoffeeHelper(){
        return new CoffeeHelper();
    }

}

1 Ответ

0 голосов
/ 29 ноября 2018

Да, единственный экземпляр CoffeeHelper будет предоставлен как в MainActivity, так и в SecondActivity, при условии, что они имеют объявление как таковое: @Inject CoffeeHelper helper.Единственный экземпляр будет возвращен из-за scoping , тогда как @Singleton является аннотацией определения кинжала-2.

Это хорошая практика?

Это довольно сомнительно и в основном основано на мнении, но это очень распространенная модель, если вы не используете модули кинжалов, предназначенные для использования на Android (что обеспечивает AndroidInjector и другие удобства).

...