Let Tapestry do the work for you; as it instantiates services and other objects, it logs what it's doing; it should be able to point you right at the class (and even line number) of the errant injection. Read the console log.
On Mon, May 24, 2010 at 1:19 PM, Erick Erickson <erickerick...@gmail.com> wrote: > Howard: > > Thanks for your answer, but I sure don't see where we're injecting by > the type, but that may just mean I need to look harder. Maybe somewhere > we're providing a builder or something. > > But just for clarification, you're saying that I should NOT need to do the > ContributeAlias bit to resolve the bind().withId("one") if all the Tapestry > injections > of the service are annotated wtih @InjectService("one")? > > I guess my next step is to see just how much stuff I can remove before > things > "just work". If I get it back to what looks like a test program I'll let you > know. > > Thanks > Erick > > > > On Mon, May 24, 2010 at 3:06 PM, Howard Lewis Ship <hls...@gmail.com> wrote: > >> You should only be getting this error: >> >> Service interface CommonInterface is matched by 2 services: one, two. >> Automatic dependency resolution requires that exactly one service implement >> the interface. >> >> >> if you are injecting somewhere by type (CommonInterface) rather than >> service id. The console log will tell you exactly how Tapestry got to >> that point. >> >> On Mon, May 24, 2010 at 11:32 AM, Shing Hing Man <mat...@yahoo.com> wrote: >> > 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 >> > >> > >> >> >> >> -- >> Howard M. Lewis Ship >> >> Creator of Apache Tapestry >> >> The source for Tapestry training, mentoring and support. Contact me to >> learn how I can get you up and productive in Tapestry fast! >> >> (971) 678-5210 >> http://howardlewisship.com >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >> For additional commands, e-mail: users-h...@tapestry.apache.org >> >> > -- Howard M. Lewis Ship Creator of Apache Tapestry The source for Tapestry training, mentoring and support. Contact me to learn how I can get you up and productive in Tapestry fast! (971) 678-5210 http://howardlewisship.com --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org