Tôi có đoạn mã sau sử dụng bindings Guice:Guice: Ràng buộc một số đối tượng với sự phụ thuộc khác nhau
public class MyApplication {
public static void main(String[] args) {
Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
bind(Foo.class).annotatedWith(Names.named("first")).toInstance(new Foo("firstFoo"));
bind(Foo.class).annotatedWith(Names.named("second")).toInstance(new Foo("secondFoo"));
bind(Bar.class).to(BarImpl.class);
bind(MyApplication.class).asEagerSingleton();
}
});
}
private @Named("first") Bar first;
private @Named("second") Bar second;
static @Value class Foo { String name; }
static interface Bar {}
static class BarImpl implements Bar {
@Inject @Named Foo foo;
}
}
Tôi đang cố gắng để có được một đối tượng Bar
cho cả tên Foo
s tiêm trong ứng dụng của tôi. Về cơ bản, nó bằng cách nào đó sẽ kết nối các @Named
trên Foo
với một trên Bar
. Tôi đã thử một số giải pháp, từ việc đặt @Named
lên mọi thứ để viết một tùy chỉnh Provider
. Cái sau không hoạt động vì tôi không có quyền truy cập vào giá trị của chú thích @Named
bên trong nhà cung cấp. Tôi nghĩ rằng giải pháp là một nơi nào đó trong dòng bind(Bar.class).to(BarImpl.class);
, nói với nó để nhớ giá trị của chú thích @Named
.
Câu hỏi của tôi là, điều này có thể xảy ra hay không và nếu có thì làm cách nào?
Cảm ơn, điều này có vẻ đầy hứa hẹn. Tôi sẽ thử nó vào thứ hai. – Jorn
Có, điều này đã giải quyết được vấn đề của tôi. Cảm ơn một lần nữa! – Jorn
Bạn được chào đón! –