I Dolch für Dependency Injection bin mit „contactServiceModule muss DaggerAppComponent $ Builder.build (DaggerAppComponent.java) eingestellt werden“, ich nicht tauchen entschuldigen in tiefe und immer meine Hände auf :) Ich verwende zwei Module (ApplicationModule, ContactServiceModule) mit einer Komponente (AppComponent). Ich habe den Dolch in App.java initialisiert, und ich versuche, Abhängigkeiten zu einem Hintergrunddienst zu injizieren. Hier ist das Code-Snippet. 1) ApplicationModule.javaDagger Dependency Injection zu Dienst nicht mit
@Module
public class ApplicationModule {
private final App mApp;
private Service contactService;
public ApplicationModule(App app) {
mApp = app;
}
@Provides
@Singleton
public ContactModel contactModel(SQLiteDatabase database) {
return new ContactModel(mApp, database);
}
@Provides
@Singleton
public Context appContext() {
return mApp;
}
@Provides
@Singleton
public ContactController contactController() {
return new ContactController(mApp.getAppComponent());
}
//.....Some more code
}
2) ContactServiceModule.java
@Module
public class ContactServiceModule {
ContactService contactService;
public ContactServiceModule(ContactService contactService){
this.contactService =contactService;
}
@Provides
@Singleton
ContactService provideContactService() {
return this.contactService;
}
}
3) AppComponent.java
@Singleton
@Component(modules = {ApplicationModule.class,ContactServiceModule.class})
public interface AppComponent {
ContactController contactController();
Context appContext();
//...Some code
void inject(ContactController contactController);
//...Some code
void inject(ContactService contactService);
}
4) App.java
public class App extends Application {
private AppComponent mAppComponent;
@Override
public void onCreate() {
super.onCreate();
FlowManager.init(this);
mAppComponent = DaggerAppComponent.builder()
.applicationModule(new ApplicationModule(this))
.build();
}
public AppComponent getAppComponent() {
return mAppComponent;
}
}
5) ContactService.jav a
public class ContactService extends Service {
@Inject
Context appContext;
@Inject
ContactController contactController;
@Override
public void onCreate() {
super.onCreate();
getAppComponent().inject(this);
}
private AppComponent getAppComponent() {
return ((App)getApplication()).getAppComponent();
}
}
Es könnte ein Problem der Abhängigkeiten von UI-Threads sein, die in Hintergrunddienste eingespeist werden. Aber ich verstehe nicht, wie ich die gleichen Abhängigkeiten erreichen soll, um in Dienste eingefügt zu werden. Oder wie sollte der ideale Weg sein, um zwischen Abhängigkeiten und Diensten auf Anwendungsebene zu kommunizieren. Ich möchte der Service immer im Hintergrund ausgeführt werden, und das Hören zu verschiedenen Absichten und kommunizieren auch auf andere Abhängigkeiten wie EventBus usw.
Ich sehe nicht, Sie rufen 'neue ContactServiceModule (Service)' und fügen Sie es an der Komponente überall –