当前位置: 首页 > 知识库问答 >
问题:

如何在android中使用Guice注入的工厂?

广乐邦
2023-03-14

我在使用Guice注入的Factory时遇到问题。

我读过这篇好文章http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/assistedinject/FactoryModuleBuilder.html但我还是不明白。也就是说,为什么模块从未使用过?比如在Guice。createInjector()方法。

我尝试了这个简单的应用程序,我有NullPointerExcema,因为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构造函数从未被调用。配置模块也是如此。我看不到这个模块在哪里使用。有什么想法吗?也许我错过了什么?

共有2个答案

潘哲
2023-03-14

如果你也需要使用ActionBarSherlock,那么看看roboguice sherlock。

冯开诚
2023-03-14

据我所知,我开始认为在Android应用程序中使用纯GUI没有任何优势。Roboguice是正确的选择。

 类似资料:
  • 我是一名guice新手,试图弄清楚如何使用FactoryModuleBuilder在guice中实现辅助注入。我参考了guice java文档来实现FactoryModuleBuilder。 我所做的一切都完全按照文件中所说的那样。这不是注射工厂。我提到了这个堆栈溢出问题:Guice AssistedInject不会注入具有相同问题的工厂。它讨论了构造函数注入之前的字段注入问题。我遵循了它,并尝试

  • 我已经使用GoogleGuice几个月了。我对它很满意,但似乎我用错了。我创造了很多辅助注射,有时还有两个注射器。 因此,我想了解这里的一般原则。 是否应该为连接主类所有内容的所有应用程序配备一个喷油器? 最佳实践是关于从应用程序一开始就尝试在构造函数中注入大量内容吗?(我看到了测试的优势) 我的主要问题是,有时我觉得某些对象组的创建属于某个组件。有必要封装它吗?你会如何处理? 当您拥有一个重要的

  • 我上了如下的课,效果很好 现在,我没有直接使用EmpService,而是创建了一个接口,EmpService实现了该接口,如下所示。 所以现在我的资源类必须使用接口,但我不确定如何引用它必须使用的实现。 我看到了这个,我不确定我的绑定应该去哪里。(这是我第一个与Guice相关的项目,所以我是一个完全的新手)。 这就是“未绑定com.api.EmpService的实现”出现的错误这完全可以理解,但不

  • 我是Guice注入的新手。如何将类注入到将在静态方法中使用的静态变量中? 这是我想在 doLocalize() 方法中使用注入的变量 b 的类。 这是我想要对其执行guice注入的模块类。 注意:我不能改变我的模块和B类,因为它来自另一个依赖项。 我想在我的A类中注入的类

  • 我正在努力实现DI,特别是使用guice的构造函数注入。我很难理解如何将泛型的类类型注入到构造函数中。 我的课程如下: 我可以在运行时使用guice将类的类型注入构造函数吗?简而言之,我可以使用guice注入Foo构造函数吗?

  • 我一直在用guice做一个项目。 我有一个抽象类,它有很多实现。为了使用正确的实现,我使用一个工厂,它接收参数,然后返回正确的实例。 演示代码 我想知道的是,如果我可以用替换工厂,直接注入的实现(请注意,它们应该使用辅助注入)? 谢谢你。