使用Guice注入的工厂时遇到问题。
我读过这篇好文章http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/assistedinject/FactoryModuleBuilder.html,但仍然不明白。即为什么模块从未使用过?与 Guice.createInjector()方法一样。
我尝试了这个简单的应用程序,并且我有 NullPointerException ,因为Guice无法解决我需要的工厂。
public interface FooInterface
{
String getString();
}
public class Foo implements FooInterface {
String bar;
@Inject
Foo(@Assisted String bar)
{
Log.i("main", "Foo constructor");
this.bar = bar;
}
public String getString(){
Log.i("main", "getString");
return this.bar;
}
}
public interface FooFactory
{
FooInterface create(String bar);
}
这是配置模块
public class ConfigurationModule extends AbstractModule
{
@Override
protected void configure()
{
Log.i("main", "Configuration module");
install(new FactoryModuleBuilder().implement(FooInterface.class, Foo.class).build(FooFactory.class));
}
}
我的活动
public class MyActivity extends Activity implements View.OnClickListener
{
@Inject private FooFactory fooFactory;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i("main", "onCreate");
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(this);
}
@Override
public void onClick(View view)
{
Log.i("main", "onClick");
FooInterface foo = this.fooFactory.create("foo name");
String str = foo.getString();
Toast.makeText(getApplicationContext(), "String is: "+ str, Toast.LENGTH_SHORT);
}
}
正如我从日志中看到的那样,永远不会调用 Foo 构造函数。与 ConfigurationModule 相同。我看不出这个模块的用途。有任何想法吗?也许我错过了什么?
答案 0 :(得分:1)
从我读过的所有内容开始,我开始认为使用纯Guice for Android应用程序没有任何优势。 Roboguice是正确的选择。
答案 1 :(得分:0)
如果您还需要使用ActionBarSherlock,请查看roboguice-sherlock。