guice 在使用注释时不注入实现
guice doesn't inject implementation when with annotation
我有这个代码:
@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);
您可以使用 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
我有这个代码:
@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);
您可以使用 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