[ https://issues.apache.org/jira/browse/CAY-2029?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14960674#comment-14960674 ]
ASF GitHub Bot commented on CAY-2029: ------------------------------------- GitHub user thinline72 opened a pull request: https://github.com/apache/cayenne/pull/76 CAY-2029 | Allow out-of-order insertion into DI lists You can merge this pull request into a Git repository by running: $ git pull https://github.com/thinline72/cayenne CAY-2029 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/cayenne/pull/76.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #76 ---- commit 3cdd4872e7efc8cfdcd36d21bbcdf208af930c9d Author: Savva Kolbachev <s.kolbac...@gmail.com> Date: 2015-10-16T13:18:01Z CAY-2029 | Allow out-of-order insertion into DI lists ---- > Allow out-of-order insertion into DI lists > ------------------------------------------ > > Key: CAY-2029 > URL: https://issues.apache.org/jira/browse/CAY-2029 > Project: Cayenne > Issue Type: Task > Reporter: Andrus Adamchik > Assignee: Savva Kolbachev > > We need that per CAY-2028. The following API is suggested: > {noformat} > // binding a type. Key is implicit (as it can be calculated automatically) > // and can be addressed when inserting other items. > ListBuilder.add(Class<T> type); > // binding an instance. Key is implicit and is calculated automatically. > // It can not be transparently addressed in ordering > ListBuilder.add(T object); > // @since 4.0 > // binding an instance. Key is explicit and can be addressed when inserting > // other items > ListBuilder.add(Key<T> key, T object); > {noformat} > All 3 styles of binding should return a subclass of ListBuilder that supports > reordering of the previously inserted item: > {noformat} > ListBuilder after(Class<?> type); > ListBuilder after(Key<?> key); > ListBuilder before(Class<?> type); > ListBuilder before(Key<?> key); > {noformat} > Some implementation points: > * If no before/after is specified, the ordering is non-deterministic. > * The algorithm should detect cycles (key1 before key2 and key2 before key1) > and throw an exception > * The algorithm should allow to reference another key in before/after, prior > to that key being bound to DI. > The reason for using this elaborate mechanism, instead of letting the caller > to inspect the contents of the list directly is that the DI list contains > mostly Providers, usually multiple Providers wrapping each other. So looking > at that directly makes little sense. -- This message was sent by Atlassian JIRA (v6.3.4#6332)