当前位置: 首页 > 面试题库 >

Guice注入通用类型

郑嘉悦
2023-03-14
问题内容

我正在尝试使用Guice注入通用类型。我的Repository 位于Cursor类中。

public class Cursor<T> {

    @Inject
    protected Repository<T> repository;

因此,当我创建Cursor 时,我还希望Guice将我的存储库注入Repository 。有没有办法做到这一点?


问题答案:

您必须使用TypeLiteral

import com.google.inject.AbstractModule;
import com.google.inject.TypeLiteral;

public class MyModule extends AbstractModule {

  @Override
  protected void configure() {
    bind(new TypeLiteral<Repository<User>>() {}).to(UserRepository.class);
  }
}

要获取的实例Cursor<T>Injector则需要:

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.TypeLiteral;

public class Main {

  public static void main(String[] args) {
    Injector injector = Guice.createInjector(new MyModule());
    Cursor<User> instance = 
        injector.getInstance(Key.get(new TypeLiteral<Cursor<User>>() {}));
    System.err.println(instance.repository);
  }
}

在FAQ中有更多细节。



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

  • 我正在尝试用Guice注入泛型类型。我有存储库 所以当我创建光标时

  • 我使用了两个常见的包,Immutables和guice。在运行时发生的第一件事是将环境和其他源中的设置加载到一个单独的、非不可变的配置类中的设置中,我们将其称为,例如,它公开了一个公共的方法。 我有一个抽象的不可变类,叫做。在实例化时,需要根据设置一个字段。 现在,我通常使用Guice将注入到类中,并想出一种方法来实现类(避免每次构建对象时都必须手动注入类--这是使用juice管理DI的全部原因)

  • 我正在尝试在Guice进行辅助注射。 这是我的实现。 工厂界面。 吉思模块: 我得到错误:“DaoFactory不能用作键;这一点没有充分说明”。 我应该如何配置FactoryModuleBuilder? 我的目标是在运行时使用DaoFactory获取Dao的类型化实例

  • 我正在使用 scala play 2.5,在尝试在我的一个控制器中注入对象时出现以下错误。我正在使用 play 给出的默认注入框架,即 Guice。 这是控制器: 以下是我想注入的服务: 这就是我使用它的方式:

  • 我想在使用guice实例化子类时,将依赖项注入父类。在下面的示例中,我试图创建的一个实例,同时希望能够在运行时使用Guice注入。我该怎么做?