在任何Android应用程序中使用Dagger2的具体要求是什么?在Android应用程序中使用dagger2的实际好处是什么?

时间:2017-02-11 18:20:51

标签: android mvp dagger-2

我阅读了匕首2文档,但仍然无法找到在我的应用程序中应该使用dagger2的条件,以及它的实现有哪些好处?

1 个答案:

答案 0 :(得分:0)

1。)要使用Dagger2,您需要将其作为项目中的依赖项包含在内。

annotationProcessor 'com.google.dagger:dagger-compiler:2.9'
compile 'com.google.dagger:dagger:2.9'
provided 'org.glassfish:javax.annotation:10.0-b28'

然后你可以使用Dagger2。

2。)每当你有一个类是另一个类的依赖时。

所以,如果你有这样的事情:

public int getNewRandomNumber() {
    return new Random().nextInt(5000);
}

然后你对Random有一个隐含的依赖,而且它不可模仿。

因此,您可能希望将此作为方法的依赖项提供:

public int getNewRandomNumber(Random random) {
   return random.nextInt(5000);
}

但是你可能在很多地方使用Random,所以你可能想把它提供给类本身:

public class RandomGenerator {
    private final Random random;

    public RandomGenerator(Random random) {
        this.random = random;
    }
}

之后问题浮出水面:如果您需要RandomGenerator的实例,您从哪里获得Random

当然这是愚蠢的:

RandomGenerator gen = new RandomGenerator(new Random());

这样做会不会更好:

RandomGenerator randomGenerator = component.randomGenerator();

@Inject
RandomGenerator randomGenerator;
显然,与Dagger相比,这很容易

@Module
public class RandomModule {
    @Provides
    @Singleton
    Random random() {
        return new Random();
    }
}

@Singleton
@Component(modules={RandomModule.class})
public interface SingletonComponent {
    Random random();
    RandomGenerator randomGenerator();
}

然后

@Singleton
public class RandomGenerator {
    private final Random random;

    @Inject
    public RandomGenerator(Random random) {
        this.random = random;
    }
}

@Singleton
public class RandomGenerator {
    @Inject
    Random random;

    @Inject
    public RandomGenerator() {
    }
}

您可以阅读有关依赖注入here

的更多信息