[
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 <[email protected]>
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)