Thomas gives very good advice, although I personally never use the
@ImplementedBy annotation (not entirely sure why...).

To complement his answer, if you're interested in saving the
"addClickHandler" call you may want to take a look at UiBinder the
@UiHandler annotation.

On Jun 27, 3:41 pm, Thomas Broyer <[email protected]> wrote:
> On 27 juin, 19:39, yves <[email protected]> wrote:
>
>
>
>
>
> > Olivier,
>
> > Thanks for the link.
>
> > If I try to summarize my problem : Which are the conventions that are
> > implicitly used by GIN to bind classes ?
>
> > I've already seen gwt-presenter, but it didn't helped me to understand
> > how to transform my code to such code  :
>
> > public class AppModule extends AbstractGinModule {
>
> >         @Override
> >         protected void configure() {
>
> >                 bind(EventBus.class).to(DefaultEventBus.class);
>
> > bind(MainPresenter.Display.class).to(MainWidget.class);
>
> > bind(MenuPresenter.Display.class).to(MenuWidget.class);
>
> > bind(IssueEditPresenter.Display.class).to(IssueEditWidget.class);
>
> > bind(IssueDisplayPresenter.Display.class).to(IssueDisplayWidget.class);
>
> If you control all of those classes, and they only exist as an
> interface+implementation class for testing purpose, then I'd rather
> annotate the interfaces with @ImplementedBy, e.g.
>   �...@implementedby(MainWidget.class)
>    public interface Display { ... }
> That way, GIN will automatically use MainWidget as if you wrote the
> bind().to(); and in case you want to inject some other implementation
> (e.g. in some complex tests), you can use bind().to() without risking
> a "duplicate binding".
>
>
>
>
>
> > Is there any doc explaining what is behind the scene with all these
> > "bind().to()" calls ?
>
> > In my example, if I write something like
>
> > bind(SearchPresenter.Display.class).to(someWidget.class);
>
> > is it equivalent to
>
> >                 display = d;
> >                 display.getSearchButton().addClickHandler(new
> > ClickHandler() {
>
> >                         @Override
> >                         public void onClick(ClickEvent event) {
> >                                 doSearch(event);
> >                         }
>
> >                 });
>
> > and how to tell GIN that I need to call doSearch() ?
>
> No! GIN is only about dependency injection, i.e. it saves you the
> "new", and nothing else.
> With the above bind().to() and an @Inject annotation on the
> bind(Display) method, then when GIN is asked to instantiate a
> SearchPresenter (i.e. when you do not write the "new" yourself) it'll
> automatically instantiate a SomeWidget and call bind() with it as an
> argument (and when instantiating the SomeWidget, it'll automatically
> instantiate the required dependencies and inject them to @Inject-
> annotated constructor, fields and methods).
>
> Maybe you should look for Guice tutorials to better understand what
> dependency injection is, and how to configure it with Guice.

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to