如何使用 guice 在我的控制器中注入我的服务 class?

How to inject my service class in my controller using guice?

我想将 DI 功能添加到在控制器层使用简单服务实例化的旧代码库。

我尝试在控制器 class 中的 serviceInterface 字段之前使用 @Inject。并用 @ImplementedBy(ServiceInterfaceImpl).

注释我的 ServiceInterface

我的代码如下所示: 控制器 class

public class MyController {
    @Inject
    ServiceInterface serviceInterface;

    InitContext(..){
        // somecode
        Toto toto = serviceInterface.getToto(); //I get an NPE here
        // other code
    }
}

服务接口代码:

@ImplementedBy(ServiceInterfaceImpl.class)
public interface ServiceInterface {
     Toto getToto();
}

ServiceInterfaceImpl 代码:

@Singleton
public class ServiceInterfaceImpl implements ConventionServices {
     Toto getToto(){
          //somecode
     }
}

我希望我的服务会被实例化,但我得到一个 NPE,表明我错过了一些东西,我尝试在我的服务构造函数之前添加 @Provides 但没有任何改变。

您应该在构造函数中注入 ServiceInterface,而不是作为字段注入

你的问题是你有空值,因为字段注入发生在构造函数注入之后。所以将你的注入移动到构造函数而不是字段注入:

public class MyController {
  private final ServiceInterface serviceInterface;
  @Inject MyController(ServiceInterface serviceInterface) {
    this.serviceInterface = serviceInterface;
    Toto toto = serviceInterface.getToto();
  }
  ...
}