Я разработчик Android и пытаюсь выучить Dagger2
.Я прошел некоторые уроки и получил некоторое базовое понимание.Я разработал базовое Java-приложение, используя Dagger2
.Ниже приведен код моего приложения.
Logger.java: Logger - это простой Java-класс, который будет печатать журналы с некоторым тегом.
public class Logger {
private String tag;
@Inject
public Logger(String tag) {
this.tag = tag;
}
public void log(String msg) {
System.out.println(tag + "::" + msg);
}
}
InvertNumber.java: Инвертирует переданный номер и печатает журнал, используя Logger
public class InvertNumber {
private Logger logger;
@Inject
public InvertNumber(Logger logger) {
this.logger = logger;
}
public void invert(int i) {
logger.log("Inverted value is " + (i * -1));
}
}
Теперь я добавил Dagger2
классы зависимостей (модуль и компонент), как показано ниже
@Module
public class NumberModule {
private String tag;
public NumberModule(String tag) {
this.tag = tag;
}
@Provides
Logger provideLogger(){
Logger logger = new Logger(tag);
return logger;
}
@Provides
InvertNumber provideTempManager(Logger logger){
return new InvertNumber(logger);
}
}
@Component(modules = NumberModule.class)
public interface NumberComponent {
InvertNumber getInvertNumber();
}
Ниже приведен мой основной метод.
public static void main(String[] args) {
NumberComponent numberComponent = DaggerNumberComponent.builder()
.numberModule(new NumberModule("MyMain"))
.build();
InvertNumber invertNumber = numberComponent.getInvertNumber();
invertNumber.invert(10);
}
Чтобы распечатать журналы в консоли, я должен предоставить tag для logger ,Для этого я создаю экземпляр класса NumberModule
и передаю его конструктору NumberComponent.
Теперь мои вопросы:
- Это правильный способ передачи тега с использованием
NumberModule
instance - Если это правильно, в соответствии с концепцией DI, не рекомендуется использовать новый оператор для создания объектов (new NumberModule ())
- Если приведенный выше код неверен, то как правильно?