Android и Guice - Как передать параметр? - PullRequest
0 голосов
/ 30 марта 2011

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

public class MyObject
{
  @Inject
  public MyObject(int anInteger)
  {
    //do something
  }
}


public class MyActivity extends RoboActivity
{
   @Inject (anInteger = 5) MyObject myObject;
   // I want to be able to pass an object to be used when calling the 
   // initializer method
}

Ответы [ 2 ]

1 голос
/ 30 марта 2011

Вы должны быть в состоянии сделать это с bindConstant() и соответствующим образом аннотировать.См., Например, Как ввести параметры конфигурации?

0 голосов
/ 30 марта 2011
public class MyModule extends AbstractModule
{
  @Override
  protected void configure()
  {
    bind(Integer.class).
        annotatedWith(Names.named("my.object.an.integer")).
        toInstance(500);
  }

  @Provides
  @Named("an.integer.5")
  public MyObject myObject5()
  {
    return createMyObject(5);
  }

  @Provides
  @Named("an.integer.100")
  public MyObject providesMyObject100()
  {
    return createMyObject(100);
  }

  private MyObject createMyObject(int anInteger)
  {
    MyObject result = new MyObject(anInteger);
    // if there are any other fields/setters annotated with @Inject
    requestInjection(result);
    return result;
  }
}


public class MyObject
{
  public MyObject(int anInteger)
  {
    System.out.println("anInteger = " + anInteger);
  }
}

public class User
{
  @Inject
  @Named("an.integer.5")
  private field MyObject five;

  @Inject
  @Named("an.integer.100")
  private field MyObject hundred;
}
...