Ich habe versucht, die gleiche Frage zu beantworten. I denke, Ich bin nah gekommen, wie es "sollte" ideal arbeiten, aber ich bin nur um das GitHub-Projekt verdummend und versuchen, es basierend auf Informationsfetzen dort herauszufinden, wie viele der Dokumentation für Dolch 2 wird noch geschrieben (ab dieser Woche).
Mein Beispielcode unten ist eigentlich für eine Android-Aktivität, aber ich glaube, dass derselbe Ansatz für das Servlet funktionieren sollte, nach dem Sie fragen.
Fügen Sie einen MembersInjector < ...> zu Ihrer @ Component-Schnittstelle hinzu; beispielsweise in der folgenden Komponente habe ich für meine MainActivity Klasse hinzugefügt:
package ...;
import javax.inject.Singleton;
import dagger.Component;
import dagger.MembersInjector;
@Singleton
@Component(modules = { PlaygroundModule.class })
public interface MainComponent {
Wizard createWizard();
MembersInjector<MainActivity> mainActivityInjector();
}
Und dann in der Klasse, die Sie wollen nach Objekterstellung an einer geeigneten Stelle Mitglied injiziert, sondern geben, bevor Sie müssen verwenden Sie Ihre injizierten Mitglieder, müssen Sie die Komponente erstellen und das Element Injektion verwenden:
package ...;
// other imports
import javax.inject.Inject;
import dagger.MembersInjector;
public class MainActivity extends ActionBarActivity {
@Inject
Wizard wizard;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MainComponent c = DaggerMainComponent.create();
c.mainActivityInjector().injectMembers(this);
// other code...
}
}
Das einzige, was ich nicht klar bin, ob dieses Muster die Komponente innerhalb des Objekts zu schaffen, in injiziert werden angenommen hat, ist richtig. Es fühlt sich nicht ganz richtig an, aber es ist immer noch sehr flexibel, da Sie nur fest an die Komponente und nicht an die Module binden. Vielleicht ist das die richtige Herangehensweise, aber vielleicht ist es ein bisschen daneben.
Ah; Es ist auch möglich, eine void -Methode in Ihrer Component-Schnittstelle zu erstellen, die ein Objekt aufnimmt, und es wird eine Member-Injektion darauf durchführen. Das wäre ein bisschen einfacher als der hier bereitgestellte Quellcode, aber funktionell gleich. Hier ist die relevante Dokumentation: https://google.github.io/dagger/api/2.0/dagger/Component.html –