Tôi đã cố trả lời cùng một câu hỏi này. Tôi nghĩ tôi đã nhận được gần nó như thế nào "nên" làm việc lý tưởng, nhưng tôi chỉ derping xung quanh dự án GitHub và cố gắng tìm nó ra dựa trên phế liệu của thông tin đó, như rất nhiều tài liệu cho Dagger 2 vẫn đang được viết (tính đến tuần này).
Mã ví dụ của tôi dưới đây thực sự là dành cho Hoạt động trên Android, nhưng tôi tin rằng cách tiếp cận tương tự này cũng có tác dụng đối với servlet bạn đang hỏi.
Thêm thành viên < ...> vào giao diện @Component của bạn; ví dụ, trong các thành phần dưới đây, tôi đã thêm một lớp MainActivity tôi:
package ...;
import javax.inject.Singleton;
import dagger.Component;
import dagger.MembersInjector;
@Singleton
@Component(modules = { PlaygroundModule.class })
public interface MainComponent {
Wizard createWizard();
MembersInjector<MainActivity> mainActivityInjector();
}
Và sau đó trong lớp học của bạn mà bạn muốn trở thành thành viên tiêm, tại một nơi thích hợp sau khi tạo đối tượng nhưng trước khi bạn cần sử dụng các thành viên tiêm, bạn cần để tạo ra các thành phần và sử dụng tiêm thành viên:
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...
}
}
một trong những điều tôi không rõ ràng về là liệu mô hình này tạo ra các thành phần bên trong đối tượng đó là nghĩa vụ phải được tiêm vào đúng. Nó không hoàn toàn cảm thấy đúng, nhưng, nó vẫn còn rất linh hoạt vì bạn chỉ ràng buộc chặt chẽ với các thành phần và không phải là các mô-đun. Vì vậy, có lẽ đây là cách tiếp cận chính xác, nhưng có lẽ nó là một chút đi.
Nguồn
2015-04-10 14:17:58
Ah; nó cũng có thể tạo ra một phương pháp void trong giao diện Component của bạn mà lấy một đối tượng, và nó sẽ thực hiện tiêm thành viên khi nó. Điều đó sẽ đơn giản hơn nhiều so với mã nguồn được cung cấp ở đây, nhưng có chức năng giống nhau. Đây là tài liệu liên quan: https://google.github.io/dagger/api/2.0/dagger/Component.html –