Currently I am working in Guice injection related development and experiencing injection problem with multiBind with optional= true.
In guice-4.0, I have seen skipping injection if it is optional.
code location: MembersInjectorStore.java
Method: /** * Returns the injectors for the specified injection points.
*/
ImmutableList<SingleMemberInjector> getInjectors(
Set<InjectionPoint> injectionPoints, Errors errors) {
List<SingleMemberInjector> injectors = Lists.newArrayList();
for (InjectionPoint injectionPoint : injectionPoints) {
try {
Errors errorsForMember = injectionPoint.isOptional()
? new Errors(injectionPoint)
: errors.withSource(injectionPoint);
SingleMemberInjector injector = injectionPoint.getMember() instanceof Field
? new SingleFieldInjector(this.injector, injectionPoint, errorsForMember)
: new SingleMethodInjector(this.injector, injectionPoint, errorsForMember);
injectors.add(injector);
} catch (ErrorsException ignoredForNow) {
// ignored for now
}
}
return ImmutableList.copyOf(injectors);
}
My code is like below:
private Set<WarningInfoClientPlugin> warningInfoClientPlugins;
@Inject(optional = true)
public void setWarningPlugins(final Set<WarningInfoClientPlugin> warningInfoClientPlugins)
{
this.warningInfoClientPlugins = warningInfoClientPlugins;
}
Code is perfectly working without optional = true attribute.
Appreciate your help on this. Thank you.
Regards,
Dilanka