গুইসের ইনজেক্টর থেকে টীকাগুলি কীভাবে পুনরুদ্ধার করবেন?


89

ধরা যাক আমার একটি মডিউল রয়েছে:

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

এবং আমি মডিউলটি পরীক্ষা করতে চাই এবং পরীক্ষা করতে চাই যে এটি ক্লাস এবং Stringক্ষেত্রবিহীন বর্ণিত ক্ষেত্রের মধ্যে সঠিক মানটিকে ইনজেকশন দেয় কিনা Names.named("annotation")তবে সরাসরি ইনজেক্টর থেকে মান গ্রহণ করতে পারে:

@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");
}

উত্তর:



15

আমি নিম্নলিখিত পদ্ধতিটি ব্যবহার করছি

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

এই জন্য সাধারণভাবে, আপনার কাছে এখনও টিকা দৃষ্টান্ত তৈরি করার সমস্যা রয়েছে তবে এখানে Names.named("annotation")কাজ করে।


4
আমি মনে করি যে এটির মূল্যের উল্লেখ আছে যে মূল সমাধানটি বিশেষত নামযুক্ত স্পেসিফিকেশনের জন্য। আপনি যদি তৈরি করেছেন এমন একটি টিকা (নির্দিষ্ট ইন্টারফেস @ অ্যানোটেশন) থাকে তবে আপনি কেবল কলটি getMethod নির্দিষ্ট হিসাবে তৈরি করবেন: ইনজেক্টর.জেটআইনস্ট্যান্স (কী.জেট (ডিজায়ারওজেক্ট.ক্লাস, এনটেশন.ক্লাস));
বোনসমগ্রলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.