Я прочитал документацию по кинжалу 2, но все еще не могу найти, в каком состоянии я должен использовать dagger2 в своем приложении и каковы преимущества его реализации?Какое конкретное требование использовать Dagger2 в любом приложении Android? Каковы фактические преимущества использования dagger2 в приложении Android?
ответ
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
и не mockable.
Таким образом, вы можете обеспечить это как зависимость от метода вместо:
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;
Ну, видимо, с кинжалом это довольно легко
@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
- 1. Dagger2 и Android
- 2. Каковы преимущества использования EJB в веб-приложении?
- 3. Понимание использования dagger2
- 4. Dagger2 пользовательского @Qualifier использования
- 5. Тесты для Android: Dagger2 + Gradle
- 6. Графики активности с Dagger2
- 7. Каковы преимущества использования студии Android
- 8. Как использовать Glide с dagger2
- 9. Dagger2: Можно ли добавить на Android версию?
- 10. Dagger2 инъекции в дочерний объект
- 11. Конфликт с Android Dagger2 и Butterknife
- 12. Зависимость инъекции с Dagger2 на Android
- 13. Dagger2 генерируется класс внезапно отсутствует Android Studio
- 14. Hello Dagger2 падает на Android Studio
- 15. Kotlin and Dagger2
- 16. annotationProcessor + androidTest + dagger2
- 17. Инъекционный тестовый модуль с dagger2
- 18. Dagger2 dagger.android. * Классов не существует
- 19. Каковы преимущества использования нокаута в приложении ASP.NET MVC
- 20. Каковы преимущества использования mxml над actionscript в приложении flex?
- 21. Dagger2 не генерирует Dagger * classes
- 22. Dagger2 multi-module design
- 23. Каковы фактические преимущества шаблона посетителя? Каковы альтернативы?
- 24. Каковы ограничения и возможности при использовании HTML5 в android? И каковы преимущества использования HTML5 в Android?
- 25. Каковы конкретные преимущества использования DI на Android?
- 26. Каковы преимущества использования sessionStorage?
- 27. Dagger2 не генерирует классы Daggercomponent
- 28. Dagger2 Not Generating Dagger * classes
- 29. Dagger2 не генерируют классы Dagger
- 30. Dagger2 не создает файлы «Dagger_»
Это основа внедрения зависимостей. Поэтому это полезно, когда вам нужно использовать инъекцию зависимостей. Это когда вам нужно вызвать метод в вашем коде, который принадлежит другому классу. Который в значительной степени всегда? Мне нравится эта статья https://spring.io/blog/2011/08/26/clean-code-in-android-applications просто заменить Guice Dagger – EpicPandaForce
Возможный дубликат [Помимо тестирования, зачем нам нужен кинжал 2?] (http://stackoverflow.com/questions/41895802/beside-testing-why-do-we-need-dagger-2) –