我想在不同的服务类中注入一个自定义类作为依赖项,但我不能让它工作。它始终以NPE结束。这是我的例子(简单的Java SE)......
我的主要课程让一切正常运行
public class Main {
public static void main(String[] args) throws IOException, TimeoutException {
MyApplication MyApp = new MyApplication();
MyApp.execute();
}
}
MyApplication类
public class MyApplication {
private MyApplicationComponent appComponent;
@Inject FooService fooService;
@Inject BarService barService;
@Inject BazService bazService;
public MyApplication() {
component = DaggerMyApplicationComponent.builder().build();
component.inject(this);
}
public void execute() {
fooService.doStuff();
barService.doStuff();
// this will happen in the FooService construct, see below
// bazService.doStuff();
}
}
Dagger中定义的组件和模块类,不使用@Inject构造函数方式
@Singleton
@Component(modules = {MyApplicationModule.class})
public interface MyApplicationComponent {
void inject(MyApplication application);
}
@Module
public class MyApplicationModule {
@Singleton
@Provides
FooService provideFooService() {
return new FooService();
}
@Singleton
@Provides
BarService provideBarService() {
return new BarService();
}
@Provides
BazService provideBazService() {
return new BarService();
}
}
使用MyApplicationModule和MyApplicationComponent提供所需的依赖项可在Main.class中使用。我还想在FooService类中使用BazService。因此,我使用@Inject方式将其定义为与FooService.class的依赖关系。
在FooService.class中使用@Inject的BazService
public class FooService {
@Inject BazService bazService;
public FooService(){}
public doStuff(){
bazService.doStuff();
}
}
由于FooSerivce类中未定义的bazService,运行Main.class始终在NPE内结束。我不认为,我错过了在任何地方添加注释。我认为Dagger不会这样工作......任何想法?
答案 0 :(得分:0)
FooService希望通过字段注入注入bazService,但是在这种情况发生之前你正在调用bazService。如果你想在FooService的构造函数中调用bazService.doStuff(),你将不得不使用构造函数注入。