Dagger2.1x의 샘플 가져오기
계기.
컨디션
참고 자료
샘플 응용 프로그램
도입된 추진 방법
몇 반이 필요해서 하나씩 해요.동작을 확인할 수 있는 최소한의 코드를 준비하세요.
app/build.gradle에서 설정 기술하기
dependencies {
def daggerVersion = "2.14.1"
compile "com.google.dagger:dagger-android:$daggerVersion"
compile "com.google.dagger:dagger-android-support:$daggerVersion"
annotationProcessor "com.google.dagger:dagger-android-processor:$daggerVersion"
annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"
}
dagger와 관련된 반을build로 만듭니다.gradle에 기술하다.공식적으로 Dagger-compuiler에 대한 설명이 없어요.이쪽도 필요해.
맞춤형 Application 클래스 제작
MainApplication.java
public class MainApplication extends Application implements HasActivityInjector, HasFragmentInjector {
@Inject
DispatchingAndroidInjector<Activity> dispatchingActivityInjector;
@Inject
DispatchingAndroidInjector<Fragment> dispatchingFragmentInjector;
@Override
public void onCreate() {
super.onCreate();
DaggerAppComponent.builder().application(this).build().inject(this);
}
@Override
public DispatchingAndroidInjector<Activity> activityInjector() {
return dispatchingActivityInjector;
}
@Override
public DispatchingAndroidInjector<Fragment> fragmentInjector() {
return dispatchingFragmentInjector;
}
}
학급 창설 단계에서는 DaggerAppComponent를 참조할 수 없지만 나중에 해결될 것이기 때문에 계속 진행할 것입니다.(HasFragmentInjector는 이 샘플에서 Fragment를 사용하지 않았기 때문에 필요없을 것 같다.)
AppComponent 기술
AppComponent.java
@Singleton
@Component(modules = {
AndroidInjectionModule.class,
AppModule.class,
ActivityBuilder.class})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
void inject(MainApplication application);
}
Dagger App Component의 초기 형태가 된 학급AppModule 기술
AppModule.java
@Module
class AppModule {
@Singleton
@Provides
Context provideContext(Application application) {
return application.getApplicationContext();
}
}
전체 응용 프로그램에서 사용할 객체를 제공합니다.이번에는 컨텍스트를 대상으로 API 고객의 리포지토리 등을 기술한다.
ActivityBuilder 기술
ActivityBuilder.java
@Module
public abstract class ActivityBuilder {
@ContributesAndroidInjector(modules = MainActivityModule.class)
abstract MainActivity bindmainActivity();
}
Inject 객체의 Activity에 대해 설명합니다.MainActivity Module 기술
MainActivityModule.java
@Module
public class MainActivityModule {
// @Provides
// HogeRepository provideRepository(MainActivity mainActivity) {
// return new HogeRepository(mainActivity);
// }
}
이 샘플은 App Module에 기술된 Context만 사용하기 때문에 여기에 아무것도 쓰지 않았습니다.객체 Activity에서 Inject가 필요한 경우 주석 출력에 대한 설명을 참조하십시오.MainActivity의 기술
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Inject
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
AndroidInjection.inject(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(context, "message", Toast.LENGTH_LONG).show();
}
}
는 Inject 객체의 클래스입니다.Context를 사용하여 Toast를 표시합니다.토스트가 나올까요?
끝맺다
나는 Dagger의 DI를 사용해 보았다.이전 Dagger에 비해 액티비티에 기재된 코드가 적어 매끄럽다.
응용 디자인에서 DI를 사용하면 도면층 사이의 거리를 희소하게 할 수 있기 때문에 다음에 사용하고 싶습니다.
Reference
이 문제에 관하여(Dagger2.1x의 샘플 가져오기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yst_i/items/0a782fbeed2b2689ac81텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)