Map<Field, Injectable<?>> perRequest = new HashMap<Field, Injectable<?>>();
AccessibleObjectContext aoc = new AccessibleObjectContext();
for (AbstractField af : fields) {
aoc.setAccesibleObject(af.getField());
Parameter p = af.getParameters().get(0);
if (p.getAnnotation() == null) continue;
if (s == ComponentScope.PerRequest) {
// Find a per request injectable with Parameter
Injectable i = ipc.getInjectable(
p.getAnnotation().annotationType(),
aoc,
p.getAnnotation(),
p,
ComponentScope.PerRequest);
if (i != null) {
configureField(af.getField());
perRequest.put(af.getField(), i);
} else {
i = ipc.getInjectable(
p.getAnnotation().annotationType(),
aoc,
p.getAnnotation(),
p.getParameterType(),
ComponentScope.PERREQUEST_UNDEFINED
);
if (i != null) {
configureField(af.getField());
perRequest.put(af.getField(), i);
} else {
i = ipc.getInjectable(
p.getAnnotation().annotationType(),
aoc,
p.getAnnotation(),
p.getParameterType(),
ComponentScope.Singleton
);
if (i != null) {
configureField(af.getField());
singletons.put(af.getField(), i);
}
}
}
} else {
Injectable i = ipc.getInjectable(
p.getAnnotation().annotationType(),
aoc,
p.getAnnotation(),
p.getParameterType(),
ComponentScope.UNDEFINED_SINGLETON
);
if (i != null) {
configureField(af.getField());
singletons.put(af.getField(), i);