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