[ 
https://issues.apache.org/jira/browse/CAY-2029?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14968860#comment-14968860
 ] 

ASF GitHub Bot commented on CAY-2029:
-------------------------------------

Github user asfgit closed the pull request at:

    https://github.com/apache/cayenne/pull/76


> 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)

Reply via email to