я могу создать провайдера, который будет возвращать новый объект каждый раз, когда вызывается get - PullRequest
1 голос
/ 27 марта 2012

Я хочу иметь в классе члена провайдера, чтобы при вызове get каждый раз получал новый объект. как я могу это сделать?

public class GuiceInjectionTest
{
  @Inject
  Provider<MyClass> provider;

  public Provider<MyClass> get()
  {
    //I want a new instance every time here that is injected by guice
    return provider.get() 
  }
}

Примечание. Я хочу, чтобы Guice внедрил этот новый экземпляр, поэтому я не могу просто создать new MyClass() в реализации провайдера.

Ответы [ 2 ]

10 голосов
/ 27 марта 2012

Хотя решение @ GuillaumePolet будет работать, это не совсем предпочтительный способ сделать это. Привязка MyClass правильная, но для этого не следует вводить Injector (следует избегать введения Injector в целом).

Для любого типа, который вы можете ввести, Guice может автоматически ввести Provider этого типа. Итак, что вы должны сделать, это:

@Inject
Provider<MyClass> provider;

...
return provider.get();
1 голос
/ 27 марта 2012

Вы можете связать своего провайдера с помощью следующего кода:

bind(MyClass.class).toProvider(MyClassProvider.class);

В своем провайдере вы можете внедрить Injector и запросить новый экземпляр MyClass.class

@Inject
Injector injector;

...
return injector.newInstance(MyClass.class);

Но вытакже можно просто связать свой класс с помощью:

bind(MyClass.class);

, чтобы получить тот же результат (не совсем, в зависимости от того, как вы используете своего провайдера)

...