使用注释时,guice不会注入实现

时间:2016-04-03 15:04:07

标签: java dependency-injection annotations guice

我有这段代码:

@CostRequest private IRequestUrlRepository costRequestUrlRepository;

this.injector = Guice.createInjector(new MainModule());
        routingResponseShortRepository = injector.getInstance(IRoutingResponseShortRepository.class);
        costRequestUrlRepository = injector.getInstance(IRequestUrlRepository.class);

这是我的mainModule.java

    bind(IRequestUrlRepository.class).annotatedWith(CostRequest.class).to(CostRequestUrlRepository.class);
    bind(IRequestUrlRepository.class).annotatedWith(RouteRequest.class).to(RoutingRequestUrlRepository.class);

但是我遇到了这个运行时错误:

Exception in thread "main" com.google.inject.ConfigurationException: Guice configuration errors:

1) No implementation for com.waze.routing.automation.interfaces.IRequestUrlRepository was bound.
  while locating com.waze.routing.automation.interfaces.IRequestUrlRepository

1 error
    at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1035)
    at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:994)
    at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1044)
    at com.waze.routing.automation.runners.parallel.costRequest.BlParallelGenerator.<init>(BlParallelGenerator.java:76)
    at com.waze.routing.automation.runners.parallel.costRequest.BlParallelGenerator.main(BlParallelGenerator.java:44)
Disconnected from the target VM, address: '127.0.0.1:64132', transport: 'socket'

我该如何解决这个问题?

我无法注释

 routingResponseShortRepository = injector.getInstance(@CostRequest IRoutingResponseShortRepository.class);

1 个答案:

答案 0 :(得分:0)

您可以使用com.google.inject.Key的实例作为injector.getInstance的参数。

injector.getInstance(Key.get(IRequestUrlRepository.class, CostRequest.class));
  

如果可行,请避免使用此方法,以便让Guice提前注入您的依赖项。 (见:https://google.github.io/guice/api-docs/latest/javadoc/index.html?com/google/inject/Key.html

如果可能,最好使用@Inject。请参阅:https://github.com/google/guice/wiki/Injections