Я новичок в использовании кинжала 2 и задаюсь вопросом, каковы его преимущества в технике, которую я сейчас использую для достижения инъекции зависимостей.Dagger 2 vs Injector class
В настоящее время для достижения DI я создаю проект с двумя ароматами, издевательскими и prod. Внутри этих ароматов я создаю класс под названием Injector.
//prod Injector
public class Injector {
public static INetworkLayer provideNetworkLayer() {
return new ProductionNetworkLayer();
}
}
//mock Injector
public class Injector {
public static INetworkLayer provideNetworkLayer() {
return new MockNetworkLayer();
}
}
Класс Injector имеет статический метод для каждого объекта, который мне нужно вводить. В моем коде приложения я могу затем просто написать:
INetworkLayer networkLayer = Injector.provideNetworkLayer();
Это работает отлично подходит для тестирования, потому что в моем рабочем коде или тестового кода я могу просто сказать Инжектор, что я хочу, и в зависимости от того, что строить вариант я использую, тем Инжектор даст мне либо производственный объект, либо насмешливый тестовый объект. Если я хочу, чтобы определенный объект был одиночным, я просто могу содержать ссылку на него в классе Injector, а затем дать эту ссылку, когда вызывается ...().
Я начал использовать Dagger2 в новом проекте и обнаружил, что гораздо сложнее установить зависимости mock/prod по сравнению с методом класса Injector, который я продемонстрировал выше.
Каким образом Кинжал 2 отличается от метода «Инжекторный класс»?
Есть ли хороший способ использовать кинжал 2 для создания макетных и prod-классов?
Ваш путь больше похож на Service Locator. Я написал [статью] (http://bayou.io/draft/In_Defense_of_Service_Locator.html), сравнивая SL и DI, в которых я также упомянул о свободе ссылок на привязку ссылок. – ZhongYu
checkout https://stackoverflow.com/questions/26939340/how-do-you-override-a-module-dependency-in-a-unit-test-with-dagger-2-0 –