[英]Dagger 2 How to solve constructor dependency
我是一名Android開發人員,正在嘗試學習Dagger2
。 我已經看過一些教程並獲得了一些基本的理解。 我使用Dagger2
開發了一個基本的Java應用程序。 下面是我的應用代碼。
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);
}
要在控制台中打印日志,我必須向logger提供標簽 。 為此,我正在創建NumberModule
類的實例並將其傳遞給NumberModule
構建器。
現在我的問題是:
NumberModule
實例傳遞標簽的正確方法NumberModule
您解決問題的方法是正確的,但是使用@Component.Buidler
還有另一種方法。 (請注意,在這種情況下, Logger
和InvertNumber
構造函數中的@Inject
注釋不起作用-您可以手動調用它們)。
像這樣重寫dagger
東西
@Module
public class NumberModule {
@Inject
public NumberModule() {}
@Provides
Logger provideLogger(@Named("logger_tag") String tag){
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();
@Component.Builder
interface Builder {
@BindsInstance
Builder loggerTag(@Named("logger_tag") String tag);
NumberComponent build();
}
}
並使用它
NumberComponent numberComponent = DaggerNumberComponent.builder()
.loggerTag("MyMain")
.build();
為了允許dagger
為您創建Logger
和InvertNumber
(而不是手動調用它們的構造函數),您需要為它們各自提供接口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.