Currently in Sling Models we do have support for four different kind of type conversions
a) from primitive to wrapper and vice-versa (also within arrays), e.g. Integer to int b) from single item to one item collection (both List and Collection), e.g. List<Integer> to Integer c) from Adaptable to supported AdapterType d) from subtype to super type That conversion logic must either be implemented in the Injector itself (if it does evaluate the type) or the ModelAdapterFactory is taking care of that. In the latter case the support differs for field and method: - Method injection supports only c), d) - Field injection supports a), b), c) and d) The support for these conversions differs a lot between the different injectors. 1) BindingsInjector, checks for type itself, does neither support a), b), c) nor d)! 2) ChildResource does no type checking, therefore uses the ModelAdapterFactory for the conversions 3) OSGiService checks for the type itself, does neither support a), b), c) nor d)! 4) RequestAttribute checks for type itself, does neither support a), b), c) nor d)! 5) ResourceResolverInjector does no type checking, therefore uses the ModelAdapterFactory for the conversions 6) ValueMapInjector, checks for type itself, supports a), b), c) I have several proposals regarding that: ====== - let all injectors support all conversions - let both method and field injection support all conversions - consolidate the code in one place - document the conversions which are supported. WDYT? Konrad
