Làm cách nào để truy xuất phiên bản được chú thích từ bộ tiêm của Guice?


88

Giả sử tôi có một mô-đun:

Module extends AbstractModule
{
  @Override
  protected void configure()
  {
    bind(String.class).
      annotatedWith(Names.named("annotation")).
        toInstance("DELIRIOUS");
  }
}

và tôi muốn kiểm tra mô-đun và kiểm tra xem nó có đưa đúng giá trị vào Stringtrường được chú thích Names.named("annotation")không mà không có lớp và trường nhưng nhận được giá trị trực tiếp từ bộ phun:

@Test
public void test()
{
  Injector injector = Guice.createInjector(new Module());

  // THIS IS NOT GOING TO WORK!
  String delirious = injector.getInstance(String.class); 

  assertThat(delirious, IsEqual.equalTo("DELIRIOUS");
}

Câu trả lời:


207
injector.getInstance(Key.get(String.class, Names.named("annotation")));

15

Tôi đang sử dụng phương pháp sau

public <T> T getInstance(Class<T> type, Class<? extends Annotation> option) {
    final Key<T> key = Key.get(type, option);
    return injector.getInstance(key);
}

cho điều này. Nói chung, bạn vẫn gặp sự cố khi tạo phiên bản chú thích, nhưng ở đây đã Names.named("annotation")hoạt động.


4
Tôi nghĩ rằng nó xứng đáng đề cập đến giải pháp ban đầu dành riêng cho đặc điểm kỹ thuật Được đặt tên. Nếu bạn có Chú thích (Giao diện cụ thể @Annotation) mà bạn đã tạo, thì bạn chỉ cần thực hiện cuộc gọi dưới dạng getMethod cụ thể: injectionor.getInstance (Key.get (DesosystemObject.class, Annotation.class));
BoneSmuggler
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.