異なるサービスクラスの依存関係としてカスタムクラスを挿入したいのですが、動作しません。常にNPEで終わります。ここに私の例(単純なJava SE)...すべてが実行されている取得するDagger 2を使用した複数のサービスクラスの1つの依存関係
私の主なクラスがある
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();
}
}
使用せずに、ダガーで定義されたコンポーネントおよびモジュールのクラス
@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とMyApp必要な依存関係を提供するlicationComponentは、Main.class内で動作します。また、FooServiceクラス内でBazServiceを使用したいと考えています。したがって、私は@Injectの方法を使ってFooService.classとの依存関係として定義します。常にMain.classを実行FooService.class
public class FooService {
@Inject BazService bazService;
public FooService(){}
public doStuff(){
bazService.doStuff();
}
}
内BazServiceの@Injectを使って
が原因FooSerivceクラスで未定義bazServiceに、NPE以内に終了します。私はどこにでも注釈を追加することができなかったとは思わない。私はダガーがこのように動作しないと思います...どんなアイデアですか?
ありがとうございました。あなたが正しい!私は悪い例を選びます。私は最後のコードブロックを変更しました。 FooService内のdoStuff()は、BazService内で同じメソッドを呼び出すようになりました。それは動作しません.../ – l00kus
それはまだNPEを投げていますか?注射はすぐにうまくいくはずです。 – Dondump