- Вам нужно создать компонент, который аннотированный по @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);
}
}
См. Документацию о том, какие виды зависимостей вы можете получить. Кроме того, чтобы получить только сырой экземпляр, вы можете получить экземпляр Provider, Factory или Lazy. http://google.github.io/dagger/api/latest/dagger/Component.html
Вы также можете создать контекстное dependencis, то жизненный цикл которых зависят от жизненного цикла нагнетательных мест, как Activities or Fragments.
Надеюсь, я дал вам общее представление о том, что такое Кинжал.