Re: IoC / Multiple Implementations

2014-06-18 Thread Lance Java
I don't think there's anything stopping you from binding a List as a
service.

Since list is a common class, you will probably want to use marker
annotations or @InjectService to disambiguate.

Both approaches are discussed here:
http://tapestry.apache.org/defining-tapestry-ioc-services.html
 On 17 Jun 2014 22:06, "Michael Leuthold" 
wrote:

> Well, the scenario is a simple service-interface that returns a JSON
> array to configure a Javascript component. And depending on the input,
> the content of the JSON array looks different, that's why there are
> multiple implementations. Usually we iterate over the implementations
> and take the first result that is not null - and I just noticed that's
> exactly what the ChainBuilder does! It hides quite a bunch and does
> 'magic' :/ but I'll give it a try. I think Lances pointer to the
> OrderedConfiguration looks quite useful, too and is basically the key
> - I'll see what plays out best.
>
> However, with the given options it's a little more overhead to
> "hand-craft" the implementations to build the configuration but this
> should be do-able. Though think it would be more intuitive to just
> have the List<> injected from whatever is registered with the Binder.
>
> Thanks,
> Michael
>
>
>
> On Tue, Jun 17, 2014 at 8:51 PM, Lance Java 
> wrote:
> > I tend to do the following:
> >
> > public interface FooProvider {
> >List getFoos();
> > }
> >
> > @UsesOrderedConfiguration(Foo.class)
> > public class FooProviderImpl implements FooProvider {
> >private final List foos;
> >public FooProviderImpl(List foos) { this.foos = foos; }
> >public List getFoos() { return foos; }
> > }
> >
> > Then you can @Contribute to the FooProvider to add to the list and
> @Inject
> > the FooProvider wherever you need the list.
> >
> >
> >
> > On 17 June 2014 18:21, Thiago H de Paula Figueiredo 
> > wrote:
> >
> >> On Tue, 17 Jun 2014 09:54:24 -0300, Michael Leuthold <
> >> michael.leuth...@gmail.com> wrote:
> >>
> >>  Hello,
> >>>
> >>> I am currently stuck with the following problem: I try to inject a
> >>> list of implementations of a certain interface but it seems it does
> >>> not work using the straight approach of injecting a
> >>> "List impls"
> >>>
> >>> Though implementations exist and a list is injected but it's just
> >>> empty. Does anyone have a hint where to look here? Maybe I need to
> >>> register that list explicitly.
> >>>
> >>
> >> Tapestry-IoC doesn't support that, at least not yet. What's your
> scenario?
> >> Usually, when we need more than one implementation of a given
> interface, we
> >> create a pipeline (
> http://tapestry.apache.org/pipelinebuilder-service.html)
> >> or chain (http://tapestry.apache.org/chainbuilder-service.html) to
> >> consolidate all these implementations as a single service. Or you can
> >> create a service that receives these service implementations as its
> >> distributed configuration and acts as a locator for it.
> >>
> >> --
> >> Thiago H. de Paula Figueiredo
> >> Tapestry, Java and Hibernate consultant and developer
> >> http://machina.com.br
> >>
> >>
> >> -
> >> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> >> For additional commands, e-mail: users-h...@tapestry.apache.org
> >>
> >>
>
> -
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>


Re: IoC / Multiple Implementations

2014-06-17 Thread Michael Leuthold
Well, the scenario is a simple service-interface that returns a JSON
array to configure a Javascript component. And depending on the input,
the content of the JSON array looks different, that's why there are
multiple implementations. Usually we iterate over the implementations
and take the first result that is not null - and I just noticed that's
exactly what the ChainBuilder does! It hides quite a bunch and does
'magic' :/ but I'll give it a try. I think Lances pointer to the
OrderedConfiguration looks quite useful, too and is basically the key
- I'll see what plays out best.

However, with the given options it's a little more overhead to
"hand-craft" the implementations to build the configuration but this
should be do-able. Though think it would be more intuitive to just
have the List<> injected from whatever is registered with the Binder.

Thanks,
Michael



On Tue, Jun 17, 2014 at 8:51 PM, Lance Java  wrote:
> I tend to do the following:
>
> public interface FooProvider {
>List getFoos();
> }
>
> @UsesOrderedConfiguration(Foo.class)
> public class FooProviderImpl implements FooProvider {
>private final List foos;
>public FooProviderImpl(List foos) { this.foos = foos; }
>public List getFoos() { return foos; }
> }
>
> Then you can @Contribute to the FooProvider to add to the list and @Inject
> the FooProvider wherever you need the list.
>
>
>
> On 17 June 2014 18:21, Thiago H de Paula Figueiredo 
> wrote:
>
>> On Tue, 17 Jun 2014 09:54:24 -0300, Michael Leuthold <
>> michael.leuth...@gmail.com> wrote:
>>
>>  Hello,
>>>
>>> I am currently stuck with the following problem: I try to inject a
>>> list of implementations of a certain interface but it seems it does
>>> not work using the straight approach of injecting a
>>> "List impls"
>>>
>>> Though implementations exist and a list is injected but it's just
>>> empty. Does anyone have a hint where to look here? Maybe I need to
>>> register that list explicitly.
>>>
>>
>> Tapestry-IoC doesn't support that, at least not yet. What's your scenario?
>> Usually, when we need more than one implementation of a given interface, we
>> create a pipeline (http://tapestry.apache.org/pipelinebuilder-service.html)
>> or chain (http://tapestry.apache.org/chainbuilder-service.html) to
>> consolidate all these implementations as a single service. Or you can
>> create a service that receives these service implementations as its
>> distributed configuration and acts as a locator for it.
>>
>> --
>> Thiago H. de Paula Figueiredo
>> Tapestry, Java and Hibernate consultant and developer
>> http://machina.com.br
>>
>>
>> -
>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>
>>

-
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org



Re: IoC / Multiple Implementations

2014-06-17 Thread Lance Java
I tend to do the following:

public interface FooProvider {
   List getFoos();
}

@UsesOrderedConfiguration(Foo.class)
public class FooProviderImpl implements FooProvider {
   private final List foos;
   public FooProviderImpl(List foos) { this.foos = foos; }
   public List getFoos() { return foos; }
}

Then you can @Contribute to the FooProvider to add to the list and @Inject
the FooProvider wherever you need the list.



On 17 June 2014 18:21, Thiago H de Paula Figueiredo 
wrote:

> On Tue, 17 Jun 2014 09:54:24 -0300, Michael Leuthold <
> michael.leuth...@gmail.com> wrote:
>
>  Hello,
>>
>> I am currently stuck with the following problem: I try to inject a
>> list of implementations of a certain interface but it seems it does
>> not work using the straight approach of injecting a
>> "List impls"
>>
>> Though implementations exist and a list is injected but it's just
>> empty. Does anyone have a hint where to look here? Maybe I need to
>> register that list explicitly.
>>
>
> Tapestry-IoC doesn't support that, at least not yet. What's your scenario?
> Usually, when we need more than one implementation of a given interface, we
> create a pipeline (http://tapestry.apache.org/pipelinebuilder-service.html)
> or chain (http://tapestry.apache.org/chainbuilder-service.html) to
> consolidate all these implementations as a single service. Or you can
> create a service that receives these service implementations as its
> distributed configuration and acts as a locator for it.
>
> --
> Thiago H. de Paula Figueiredo
> Tapestry, Java and Hibernate consultant and developer
> http://machina.com.br
>
>
> -
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>


Re: IoC / Multiple Implementations

2014-06-17 Thread Thiago H de Paula Figueiredo
On Tue, 17 Jun 2014 09:54:24 -0300, Michael Leuthold  
 wrote:



Hello,

I am currently stuck with the following problem: I try to inject a
list of implementations of a certain interface but it seems it does
not work using the straight approach of injecting a
"List impls"

Though implementations exist and a list is injected but it's just
empty. Does anyone have a hint where to look here? Maybe I need to
register that list explicitly.


Tapestry-IoC doesn't support that, at least not yet. What's your scenario?  
Usually, when we need more than one implementation of a given interface,  
we create a pipeline  
(http://tapestry.apache.org/pipelinebuilder-service.html) or chain  
(http://tapestry.apache.org/chainbuilder-service.html) to consolidate all  
these implementations as a single service. Or you can create a service  
that receives these service implementations as its distributed  
configuration and acts as a locator for it.


--
Thiago H. de Paula Figueiredo
Tapestry, Java and Hibernate consultant and developer
http://machina.com.br

-
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org



IoC / Multiple Implementations

2014-06-17 Thread Michael Leuthold
Hello,

I am currently stuck with the following problem: I try to inject a
list of implementations of a certain interface but it seems it does
not work using the straight approach of injecting a
"List impls"

Though implementations exist and a list is injected but it's just
empty. Does anyone have a hint where to look here? Maybe I need to
register that list explicitly.

Thanks,
Michael

-
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org