在构造函数中访问Guice单例

时间:2012-03-08 23:06:21

标签: guice

我正在使用Guice(Roboguice v2与Guice v3完全相同),我对它有点新鲜。

我有一个单身..

@Singleton
Accounts
{
    public Account[] getAllAccounts()
    {
        // Stuff
    }
}

我还有一个类需要在构造函数中访问上面的内容。

public class AccountListAdapter extends ArrayAdapter<Account>
{
    public AccountListAdapter(Context c)
    {
        super(c, R.layout.account_list_row, R.id.accountName, accounts.getAllAccounts());
    }

    ...
}

如何访问上面用作super()调用的最后一个参数的Accounts单例?因为构造函数将在创建任何实例变量之前执行。

谢谢!

1 个答案:

答案 0 :(得分:2)

你可以处理这两种方式。

首先,您可以将适配器直接注入您的Activity。这将包括当前的Context以及singelton:

public class ExampleActivity extends RoboActivity{

     @Inject
     private AccountListAdapter accountListAdapter;

     ....
     //then register it with your listView in your onCreate()
 }

请记住,您需要添加以下注释:

public class AccountListAdapter extends ArrayAdapter<Account>
{
    @Inject
    public AccountListAdapter(Context c, Accounts acconts)
    {
        super(c, R.layout.account_list_row, R.id.accountName, accounts.getAllAccounts());
    }

    ...
}

其次,您可以在onCreate()期间自己构造对象:

public class ExampleActivity extends RoboActivity{

     @Inject
     private Account accounts;

     public void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.main);

         AccountListAdapter accountListAdapter = new AccountListAdapter(this, accounts);

     //then register it with your listView
 }

您可能必须扩展Roboguice ListActivity而不是RoboActivity才能成功使用ListActivity。如果这对您有用,请告诉我。