Android Studio 2.2.2
私はMVPのモデルであるNewsListModelImp
クラスを持っています。dagger2を使用して、アクティビティやフラグメントを持たないjavaクラスに挿入する方法
モデルに私のレトロフィットサービスを注入したいと思います。しかし、NewsListModelImp
にはコンテキストやアクティビティへの参照が含まれていないため、getApplication()
と呼ぶことはできません。あなたが活動や断片化している場合、あなたがすることは何でしょうか。私はNewsListModeImp
のコンストラクタでコンテキストやアクティビティを渡すことは望ましくありません。プレゼンターから来なければならないので、そこにはアンドロイドのものは避けたいと思っています。
public class NewsListModelImp implements NewsListModelContract {
@Inject
NYTimesSearchService mNYTimesSearchService;
public NewsListModelImp() {
((NYTimesSearchApplication)getApplication()).getAppComponent().inject(this);
}
}
マイApplicationクラス
public class NYTimesSearchApplication extends Application {
private AppComponent mAppComponent;
public void onCreate() {
super.onCreate();
/* Setup dependency injection */
createAppComponent();
}
private void createAppComponent() {
mAppComponent = DaggerAppComponent
.builder()
.retrofitModule(new RetrofitModule())
.build();
}
public AppComponent getAppComponent() {
return mAppComponent;
}
}
マイモジュール
@Module
public class RetrofitModule {
private Retrofit retrofit() {
return new Retrofit
.Builder()
.baseUrl(Constants.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
@Provides
@Singleton
public NYTimesSearchService providesNYTimesSearch() {
return retrofit().create(NYTimesSearchService.class);
}
}
マイAppcomponentに任意の提案のための
@Singleton
@Component(modules = {RetrofitModule.class})
public interface AppComponent {
void inject(NewsListModelImp target);
}
多くのおかげで、
を提供10