I think you need the Marker annotations.
Please check it out at the link below.

http://tapestry.apache.org/tapestry5.1/tapestry-ioc/service.html



Shing

--- On Tue, 25/5/10, Erick Erickson <erickerick...@gmail.com> wrote:

> From: Erick Erickson <erickerick...@gmail.com>
> Subject: Problems with @InjectService
> To: "Tapestry users" <users@tapestry.apache.org>
> Date: Tuesday, 25 May, 2010, 1:58
> I've seen several iterations of this
> problem in the users list, but the
> solution still eludes me.
> 
> This is the very basic issue of having two different
> concrete realizations
> of a particular interface and wanting to have a service for
> each concrete
> implementation in a Tapestry 1.5.0.5 environment.
> 
> The binding looks like this:
> 
>        
> binder.bind(CommonInterface.class,
> Concrete1.class).withId("one");
>        
> binder.bind(CommonInterface.class,
> Concrete2.class).withId("two");
> 
> And in various components, something like
> @InjectService("one")
> private CommonInterface concrete1;
> 
> or
> @InjectService("two")
> private CommonInterface concrete2;
> 
> But now I get errors like:
> Service interface  CommonInterface is matched by 2
> services: one, two.
> Automatic dependency resolution requires that exactly one
> service implement
> the interface.
> 
> OK, poking around I found things about ContributeAlias, and
> this example:
> public static void contributeAlias(
> @InjectService("one") Concrete1 concrete1
> Configuration<AliasContribution> configuration)
> {
> configuration.add(AliasContribution.create(CommonInterface.class,
> concrete1));
> }
> 
> and similarly for Concrete2. But now I get errors like:
> Caused by: java.lang.RuntimeException: Exception
> constructing service
> 'Alias': Error invoking service builder method
> org.apache.tapestry5.services.TapestryModule.buildAlias(Logger,
> String,
> AliasManager, Collection) (at TapestryModule.java:325)....
>                
>             Service 'one'
> implements interface
> CommonInterface, which is not compatible with the requested
> type
> 'concrete1'.
> at
> org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.obtainObjectFromCreator(JustInTimeObjectCreator.java:78)
> at
> org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.createObject(JustInTimeObjectCreator.java:57)
> 
> 
> I've severely clipped out extra stuff from the output, I'll
> be glad to
> provide more details but I suspect this is fairly trivial
> to fix if you know
> the magic, unfortunately I'm an apprentice...
> 
> I don't understand when adding ContributeAlias is
> necessary, it seems to me
> that just the "withId" should be sufficient but what do I
> know?
> 
> Thanks
> Erick
> 




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

Reply via email to