<!-- 
RSS generated by JIRA (9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b) at Mon Feb 12 04:10:37 CET 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>Magnolia - Issue tracker</title>
    <link>https://jira.magnolia-cms.com</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-uk</language>    <build-info>
        <version>9.4.2</version>
        <build-number>940002</build-number>
        <build-date>19-01-2023</build-date>
    </build-info>


<item>
            <title>[MAGNOLIA-6027] IoC: Support multi-binding</title>
                <link>https://jira.magnolia-cms.com/browse/MAGNOLIA-6027</link>
                <project id="10000" key="MAGNOLIA">Magnolia</project>
                    <description>&lt;p&gt;Currently, we can&apos;t &lt;tt&gt;@Inject&lt;/tt&gt; multiple implementations of a common type, e.g.:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
    @Inject
    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; SomeClientCode(Collection&amp;lt;Foo&amp;gt; allFoos) {
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;This is because Guice forces us to give a binding &quot;key&quot; to all components we register.&lt;br/&gt;
However, this Guice extension allows it: &lt;a href=&quot;https://github.com/google/guice/wiki/Multibindings&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/google/guice/wiki/Multibindings&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We still have to &quot;key&quot; those bindings though. One still can&apos;t inject &quot;collection of some arbitrary type&quot;, unless &quot;arbitrary type&quot; as been bound via multi-bindings. One way we could achieve this, is by annotating the types we want to &quot;multi-bind&quot;; at registration time, we look if the component we&apos;re registering has this annotation (directly or via its sub-types), and create multi-bindings for the type that has the annotations.&lt;/p&gt;

&lt;p&gt;Here&apos;s a patch that does this &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.magnolia-cms.com/images/icons/emoticons/wink.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;

&lt;p&gt;Use case: registries and callbacks. We have a bunch of places where components explicitly register themselves to make themselves known to others because of this. Concrete use-case: with new configuration mechanisms in 5.4, we&apos;ll have a &quot;registry of registries&quot; component, which needs to know about all registries in the system. With this feature, we don&apos;t need to invent a terse callback mechanism, and can&apos;t instead proceed on the &quot;don&apos;t call us we&apos;ll call you&quot; pattern that IoC is supposed to promote.&lt;/p&gt;

&lt;p&gt;PS: I&apos;m not entirely sure about the scoping of those components, and it&apos;s currently lacking any other test than &quot;i&apos;ve tried it in a live system and it worked&quot;.&lt;/p&gt;

&lt;p&gt;PPS: Scope seems to work as expected - which may make things tricky (if &quot;client&quot; is not lazy-singleton, and one of the impls is lazy, it won&apos;t see it)&lt;/p&gt;</description>
                <environment></environment>
        <key id="42176">MAGNOLIA-6027</key>
            <summary>IoC: Support multi-binding</summary>
                <type id="2" iconUrl="https://jira.magnolia-cms.com/secure/viewavatar?size=xsmall&amp;avatarId=10891&amp;avatarType=issuetype">New Feature</type>
                                            <priority id="6" iconUrl="https://jira.magnolia-cms.com/images/icons/priorities/neutral.gif">Neutral</priority>
                        <status id="6" iconUrl="https://jira.magnolia-cms.com/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are not closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="1">Fixed</resolution>
                                        <assignee username="gjoseph">Magnolia International</assignee>
                                    <reporter username="gjoseph">Magnolia International</reporter>
                        <labels>
                            <label>guice</label>
                            <label>ioc</label>
                    </labels>
                <created>Fri, 19 Dec 2014 16:51:21 +0100</created>
                <updated>Tue, 9 Feb 2016 12:59:42 +0100</updated>
                            <resolved>Thu, 5 Mar 2015 12:05:12 +0100</resolved>
                                                    <fixVersion>5.4</fixVersion>
                                    <component>core</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>2</watches>
                                                                                                                <comments>
                            <comment id="96733" author="gjoseph" created="Fri, 19 Dec 2014 17:10:38 +0100"  >&lt;p&gt;With this impl, one unfortunately &lt;em&gt;has to&lt;/em&gt; inject a &lt;tt&gt;Set&amp;lt;type&amp;gt;&lt;/tt&gt;, I was hoping a simple &lt;tt&gt;Collection&amp;lt;type&amp;gt;&lt;/tt&gt; would work&lt;/p&gt;</comment>
                            <comment id="99018" author="gjoseph" created="Wed, 18 Feb 2015 18:54:41 +0100"  >&lt;p&gt;Starting work on &lt;tt&gt;feature/guice-multibinding&lt;/tt&gt;&lt;/p&gt;</comment>
                            <comment id="99021" author="gjoseph" created="Wed, 18 Feb 2015 21:28:11 +0100"  >&lt;p&gt;Currently having an issue related to &lt;a href=&quot;https://github.com/google/guice/issues/791&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/google/guice/issues/791&lt;/a&gt; (because we don&apos;t necessarily bind a component&apos;s implementation with the implementation as a key)&lt;/p&gt;</comment>
                            <comment id="99437" author="gjoseph" created="Wed, 25 Feb 2015 19:40:16 +0100"  >&lt;p&gt;pushed a fix for the scope issue on &lt;tt&gt;feature/guice-multibinding-2&lt;/tt&gt; branch. I&apos;m not too convinced. Hopefully the Guice people comes up with a better explanation.&lt;/p&gt;</comment>
                            <comment id="99448" author="gjoseph" created="Thu, 26 Feb 2015 12:44:00 +0100"  >&lt;p&gt;After some reflection, I guess the worse that could happen with the extra binding, is that we already have a binding for &lt;tt&gt;FooImpl&lt;/tt&gt; elsewhere, which seems like a nasty idea to begin with. Unfortunately, we can&apos;t prevent it or check for it (the 2nd binding for FooImpl might happen later / in a different module)&lt;/p&gt;</comment>
                            <comment id="99788" author="gjoseph" created="Thu, 5 Mar 2015 12:17:54 +0100"  >&lt;p&gt;With help from &lt;a href=&quot;https://jira.magnolia-cms.com/secure/ViewProfile.jspa?name=tmattsson&quot; class=&quot;user-hover&quot; rel=&quot;tmattsson&quot;&gt;tmattsson&lt;/a&gt;, a better fix is now on &lt;tt&gt;feature/guice-multibinding-3&lt;/tt&gt;&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10040">
                    <name>causality</name>
                                                                <inwardlinks description="is causing">
                                        <issuelink>
            <issuekey id="50214">MAGNOLIA-6538</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10020">
                    <name>dependency</name>
                                                                <inwardlinks description="is depended upon by">
                                        <issuelink>
            <issuekey id="43182">MAGNOLIA-6076</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="43220">MAGNOLIA-6086</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                            <attachment id="26743" name="MAGNOLIA-6027.patch" size="5512" author="gjoseph" created="Fri, 19 Dec 2014 16:52:50 +0100"/>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                            <customfield id="customfield_14166" key="com.okapya.jira.checklist:checklist">
                        <customfieldname>Acceptance criteria</customfieldname>
                        <customfieldvalues>
                            
        <checklist>
        <![CDATA[
                            




                
                                    <div class="o-completion" style="display: flex; flex-shrink: 0;"><span  class="aui-lozenge aui-lozenge-complete" style="font-size: 12px; font-weight: normal; display: flex; flex-direction: row; align-items: center;" ><span style="padding-right: 4px; vertical-align: middle;"><svg width="15" height="15" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg" fill="white"><path clip-rule="evenodd" d="m10.41037,3.42544l-7.86501,0c-0.72395,0 -1.31084,0.58688 -1.31084,1.31084l0,7.86508c0,0.7239 0.58689,1.3108 1.31084,1.3108l7.86501,0c0.724,0 1.3109,-0.5869 1.3109,-1.3108l0,-7.86508c0,-0.72396 -0.5869,-1.31084 -1.3109,-1.31084zm-7.86501,-0.65542c-1.08593,0 -1.96626,0.88032 -1.96626,1.96626l0,7.86508c0,1.0859 0.88033,1.9662 1.96626,1.9662l7.86501,0c1.086,0 1.9663,-0.8803 1.9663,-1.9662l0,-7.86508c0,-1.08594 -0.8803,-1.96626 -1.9663,-1.96626l-7.86501,0z" fill-rule="evenodd"/><path d="m5.09049,10.18526l-1.82767,-1.82766l-0.78479,0.78479l2.61246,2.61246l5.38758,-5.38754l-0.78483,-0.78479l-4.60275,4.60274z"/></svg></span><span>Empty</span></span></div>
                        ]]>
    </checklist>


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10111" key="com.atlassian.jira.toolkit:reporterdomain">
                        <customfieldname>Company</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>magnolia-cms.com</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_12730" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_14151" key="com.atlassian.jira.toolkit:message">
                        <customfieldname>Docu info</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10061" key="com.atlassian.jira.toolkit:lastusercommented">
                        <customfieldname>Last comm is not jira-dev</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>true</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10071" key="com.atlassian.jira.toolkit:lastupdaterorcommenter">
                        <customfieldname>Last participant</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>apchelintcev</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_13136" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            8 years, 50 weeks, 3 days ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_10020" key="com.atlassian.jira.toolkit:attachments">
                        <customfieldname>Number of attachments</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10150" key="com.atlassian.jira.toolkit:comments">
                        <customfieldname>Number of comments</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>6.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10011" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>gjoseph</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10090" key="com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes">
                        <customfieldname>Patch included</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10100"><![CDATA[Yes]]></customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                    <customfield id="customfield_10833" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i0000t:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10244" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>56</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10245" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="54">5.4 Sprint 1</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_14145" key="com.intenso.jira.issue-templates:issue-templates-customfield">
                        <customfieldname>Template</customfieldname>
                        <customfieldvalues>
                            


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_15131" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Time in Discovery</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10032" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>Time in Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        </customfields>
    </item>
</channel>
</rss>