- @Component でアノテーションが付けられたコンポーネントを作成する必要があります。
- コンポーネントは、依存関係を提供するモジュールを受け入れます。
- 作成するすべてのコンポーネントの名前は、Dagger プレフィックス (MyComponent など) で始まります。
次の例を見てみましょう。
@Singleton
@Component(modules = DemoApplicationModule.class)
public interface ApplicationComponent {
void inject(DemoApplication application);
}
シングルインジェクション方式で ApplicationComponent を作成しました。私たちが言っているのは、特定の依存関係を DemoApplication に注入したいということです。
さらに、@Component
アノテーションでは、プロビジョニング メソッドでモジュールを指定します。
これは、モジュールが次のように見えるようなものです。
@Module
public class DemoApplicationModule {
private final Application application;
public DemoApplicationModule(Application application) {
this.application = application;
}
@Provides @Singleton SomeIntegerHandler provideIntegerHandler() {
return new MySomeIntegerHandlerImpl();
}
}
DemoApplicationModule を作成することで私たちが言っていることは、モジュールがコンポーネントによって指定された注入場所で必要な依存関係を提供できるということです。
public class DemoApplication extends Application {
private ApplicationComponent applicationComponent;
@Inject SomeIntegerHandler handler;
@Override public void onCreate() {
super.onCreate();
applicationComponent = DaggerApplicationComponent.builder()
.demoApplicationModule(new DemoApplicationModule(this))
.build();
applicationComponent.inject(this);
handler.someMethodName(5);
}
}
どのような種類の依存関係を取得できるかについてのドキュメントを参照してください。さらに、生のインスタンスを取得するだけでなく、プロバイダー、ファクトリー、またはレイジーインスタンスを取得できます。
http://google.github.io/dagger/api/latest/dagger/Component.html
アクティビティやフラグメントのように、ライフサイクルが注入場所のライフサイクルに依存するスコープ依存関係を作成することもできます。
ダガーとは何かについての基本的な概念を教えていただければ幸いです。