Dagger

时间:2018-11-28 21:16:34

标签: java android dagger-2

我想知道我是否做得很好。
如果我要在CoffeHelperMainActivity中使用一个实例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 :(得分:2)

是的,CoffeeHelperMainActivity都将提供SecondActivity的唯一实例,假设它们具有这样的声明:@Inject CoffeeHelper helper。由于scoping将返回唯一的实例,而@Singleton是dagger-2作用域注释。

  

这是一个好习惯吗?

这是一个非常可疑的问题,并且大多基于意见,但这是非常常见的模式,除非您使用专为Android使用而设计的Dagger模块(它提供了AndroidInjector和其他便利)。

相关问题