2016-04-03 47 views
-1

我有这样的代码:吉斯不注射执行时标注

@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); 

回答

0

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

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

When feasible, avoid using this method, in favor of having Guice inject your dependencies ahead of time. (see: https://google.github.io/guice/api-docs/latest/javadoc/index.html?com/google/inject/Key.html)

更好地利用@Inject如果可能的话。请参阅:https://github.com/google/guice/wiki/Injections

+0

为什么抛出错误?我在场上有一个注释。 –

+0

'injector.getInstance(IRequestUrlRepository.class);'这行引发异常,因为“com.waze.routing.automation.interfaces.IRequestUrlRepository没有实现被绑定。”这个实现是通过一个特定的('bind(IRequestUrlRepository.class).annotatedWith(RouteRequest.class)'')绑定到IRequestUrlRepository.class。参数的注释被guice api忽略...请参阅https://google.github.io/guice/api-docs/latest/javadoc/index.html?com/google/inject/Injector.html –

+0

谢谢。有什么办法可以更优雅地解决这个问题吗?有注释?或者你建议的方式来解决这个问题? –