Tôi muốn bổ sung cho phản ứng Marcin của, bằng cách thêm mà bạn không cần phải giới hạn mình để sử dụng toInstance()
hoặc phương pháp cung cấp trong tình huống như vậy.
Sau đây sẽ chỉ làm việc cũng như:
bind(Person.class).annotatedWith(Driver.class).to(MartyMcFly.class).in(Singleton.class);
bind(Person.class).annotatedWith(Inventor.class).to(DocBrown.class).in(Singleton.class);
[...]
@Inject
public BackToTheFuture(@Driver Person marty, @Inventor Person doc) { ... }
Guice sẽ bơm phụ thuộc như thường lệ khi instantiating lớp MartyMcFly và DocBrown.
Lưu ý rằng nó cũng làm việc khi bạn muốn để ràng buộc nhiều độc thân của cùng loại:
bind(Person.class).annotatedWith(Driver.class).to(Person.class).in(Singleton.class);
bind(Person.class).annotatedWith(Inventor.class).to(Person.class).in(Singleton.class);
Để làm việc này, bạn phải chắc chắn rằng Person
không bị ràng buộc trong Singleton phạm vi, hoặc rõ ràng trong mô-đun Guice hoặc với chú thích @Singleton
. Chi tiết khác trong this Gist.
Chỉnh sửa: Mã mẫu mà tôi đưa ra làm ví dụ đến từ Guice Grapher Test. Nhìn vào các bài kiểm tra Guice là một cách tuyệt vời để hiểu rõ hơn cách sử dụng API (cũng áp dụng cho mọi dự án có các bài kiểm tra đơn vị tốt).
Nguồn
2009-09-10 21:06:02
hoặc phương pháp @Provides nếu nó có phụ thuộc, tôi đã bỏ qua bit tài liệu này (http://code.google.com/docreader/#p=google-guice&s=google-guice&t=ProvidesMethods) Phụ thuộc có thể được truyền vào làm tham số cho phương thức. Các vòi phun sẽ thực hiện các ràng buộc cho mỗi trong số này trước khi gọi phương pháp. – Matt
Bạn không cần phải ràng buộc nó vào một thể hiện. Hai chú thích khác nhau cho cùng một lớp, trong phạm vi singleton, sẽ tạo ra hai cá thể riêng biệt đã có. –
@Filip, tôi đã thử những gì bạn đang đề xuất và đã nhận được cùng một phiên bản cho cả hai chú thích. Tôi đã sử dụng 'bind (MySingleton.class) .annotatedWith (One.class) .to (MySingleton.class) .in (Singleton.class); ràng buộc (MySingleton.class) .annotatedWith (Hai.class) .to (MySingleton.class) .in (Singleton.class); ' –