Sadece Dagger 2 kullanmaya başladım ve her biri farklı bir uygulama ile çevrimiçi binlerce rehber buldum ve şimdi biraz kafam karıştı.Hançer enjeksiyonu ile Hançer 2
AppModule.java:
@Module
public class AppModule {
Application mApplication;
public AppModule(Application application) {
mApplication = application;
}
@Provides
@Singleton
Application providesApplication() {
return mApplication;
}
}
DataModule.java:
@Module
public class DataModule {
private static final String BASE_URL = "http://beta.fridgewizard.com:9001/api/";
@Provides
@Singleton
NetworkService provideNetworkService() {
return new NetworkService(BASE_URL);
}
@Provides
@Singleton
SharedPreferences provideSharedPreferences(Application app) {
return PreferenceManager.getDefaultSharedPreferences(app);
}
}
PrefsModel.java:
@Module(includes = DataModule.class)
public class PrefsModel {
@Provides
@Singleton
QueryPreferences provideQuery(SharedPreferences prefs) {
return new QueryPreferences(prefs);
}
}
AppComponent Yani temelde bu şu anda yazdıklarını .java (Ben bir sunumcuya ihtiyaç duyduğumdan beri QueryPreferences nesnesini açığa çıkarıyorum, umarım) Bu şekilde doğrudur:
@Singleton
@Component(modules = {AppModule.class, DataModule.class, PrefsModel.class})
public interface AppComponent {
void inject(HomeFragment homeFragment);
QueryPreferences preferences();
NetworkService networkService();
}
Sonra FwApplication.java vardır:
@Module
public class PresenterModule {
@Provides
Presenter<FwView> provideHomePresenter(NetworkService networkService) {
return new HomePresenterImpl(networkService);
}
@Provides
Presenter<FwView> provideSearchPresenter(NetworkService networkService) {
return new SearchPresenterImpl(networkService);
}
}
ve aşağıdaki bileşen (: Son olarak sunum için başka bir modül ilave
public class FwApplication extends Application {
private static final String TAG = "FwApplication";
private NetworkService mNetworkService;
private AppComponent mDataComponent;
@Override
public void onCreate() {
super.onCreate();
buildComponentAndInject();
}
public static AppComponent component(Context context) {
return ((FwApplication) context.getApplicationContext()).mDataComponent;
}
public void buildComponentAndInject() {
mDataComponent = DaggerComponentInitializer.init(this);
}
public static final class DaggerComponentInitializer {
public static AppComponent init(FwApplication app) {
return DaggerAppComponent.builder()
.appModule(new AppModule(app))
.dataModule(new DataModule())
.build();
}
}
}
Burada bir bağımlı bağımlılıklar ekleyemediğim için hata döndürüyor):
@Component(dependencies = AppComponent.class, modules = PresenterModule.class)
public interface PresenterComponent {
void inject(HomePresenterImpl presenter);
}
o AppComponent tanımlanan bir tekil olan networkservice bağlı olduğu için
- nasıl sunum bileşeninde hatayı düzeltebilirsiniz:
Yani, beni dokümantasyon çevrimiçi okumak için net değildir kaç soru var?
HomeFragment: Düzeltme -
- Ben "Yeni HomePresenter (NetworkService)" ile HomePresenter uygulamalıdır ama şimdi DI
DÜZENLEME tanımlanmış nasıl kullanılacağını bilmiyorum bir HomeFragment var .java:
:public class HomeFragment extends Fragment {
private static final String TAG = "FW.HomeFragment";
@Inject
HomePresenterImpl mHomePresenter;
public static HomeFragment newInstance() {
return new HomeFragment();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FwApplication.component(getActivity()).inject(this);
}
Sonra bu şekilde sunum yapıcısı modifiye Daha sonra NetworkService otomatik olarak enjekte edilir.
Aşağıdaki kodu yukarıdaki ile aynı şekilde yapılmış bir sunum ihtiyacı Ben her parça için aramak zorunda çünkü bu şekilde doğru olup olmadığını merak ediyorum: Sen
FwApplication.component(getActivity()).inject(this);
'Sunucunun içerisindeki hatayı düzeltin 'lütfen * her zaman * –
' '' getAactivity() '' '' '' 'inCreate()' '' '' 'NullPointerException''''nü üretebilir. http://stackoverflow.com/a/6225044/1888738 – Bresiu