Thanks for the feedback and link.

Anthony

2008/10/3 Simone Tripodi <[EMAIL PROTECTED]>

>
> Hi Guys,
> I know the thread is a little old and you've already found a solution,
> but this week I had to face the same problem and I'm writing you just
> to tell how I resolved my issue and share the idea:
>
> my application is "profiled" for different environment, it means that
> a specific interface, in stage environment, is implemented by a
> specific class, that is really different from the production
> implementation; so, using the apache's commons-discovery
>
> http://commons.apache.org/discovery/
>
> my binding module implementation is
>
> public void configure(Binder binder) {
> ...
>    DiscoverClass discover = new DiscoverClass();
>    binder.bind(MyInterface.class).to(discover.find(MyInterface.class));
> ...
> }
>
> It's currently working in a production environment without any problem.
> Best regards,
> Simone
>
> 2008/8/21 francisco treacy <[EMAIL PROTECTED]>:
> >
> > thanks sven.
> >
> > i finally found a better way to accomplish this without guice.
> >
> > as i'm also using salve (http://code.google.com/p/salve), i created a
> > CustomLocator where i can manage salve.Keys and return appropriate
> > bindings as i want, even before guice is aware of all that. basically
> > i had to implement the Locator interface:
> >
> >        public Object locate(Key key) {
> >                if (key.getType() == Repository.class) {
> >                        Type type = key.getGenericType();
> >                        // get the "actualTypeArgument" Class clazz
> >                        return new RepositoryImpl(clazz);
> >                }
> >                return null;
> >        }
> >
> > ...and declare GuiceLocator after my own one.
> >
> > francisco
> >
> >
> > On Thu, Aug 21, 2008 at 2:43 PM, tzwoenn <[EMAIL PROTECTED]>
> wrote:
> >>
> >> Using upcoming Guice 2.0's com.google.inject.util.Types this one might
> >> work for you:
> >>
> >> for (Class<?> clazz : getClasses("myapp.domain"))
> >> {
> >>        // explicitly without wildcard type, because otherwise you can
> >> not bind an instance to that wildcard
> >>        TypeLiteral literal =
> >> TypeLiteral.get(Types.newParameterizedType(Service.class, clazz));
> >>        Service service = new ServiceImpl(clazz);
> >>        bind(literal).toInstance(service);
> >> }
> >>
> >> BR, Sven
> >>
> >>
> >> On Aug 20, 9:27 pm, "francisco treacy" <[EMAIL PROTECTED]>
> >> wrote:
> >>> ok i'm simplifying my question:
> >>>
> >>> how can i bind a generic type to a specific implementation, if i the
> >>> only information i have is a Class clazz?
> >>>
> >>> bind(new TypeLiteral<Service< (put type here from clazz) >>()
> >>> {}).toInstance(someInstance); // you see here what i'd like to do
> >>>
> >>> as i don't think this is remotely possible, i modified by reflection
> >>> the TypeLiteral's "type" actualTypeArguments. when i debug my
> >>> injector, i see the Key of the my binding is correctly set to my
> >>> clazz. but when i actually @Inject, guice says it can't find the
> >>> binding to that type. apart from the actualTypeArguments, do i need to
> >>> change something else? or there's no other way than explicitly declare
> >>> the binding like so: bind(new TypeLiteral<Service<Car>>() {})... ?
> >>>
> >>> sorry if it was a noob question on generics basics. i'd be glad to get
> >>> any additional pointers if you have.
> >>>
> >>> francisco
> >>>
> >>> On Wed, Aug 20, 2008 at 4:39 PM, francisco treacy
> >>>
> >>> <[EMAIL PROTECTED]> wrote:
> >>> > hi
> >>>
> >>> > i am trying to dynamically bind things in guice.  for one type known
> >>> > beforehand, i would directly:
> >>>
> >>> > bind(new TypeLiteral<Service<Car>>() {}).toInstance(new
> >>> > ServiceImpl<Car>("myapp.domain.Car"));
> >>>
> >>> > but now the idea is, given a list of classes in runtime, bind them to
> >>> > a particular instance... something like:
> >>>
> >>> > // along with some reflection or guicy magic
> >>>
> >>> > for (Class<?> clazz : getClasses("myapp.domain")) {
> >>>
> >>> >        TypeLiteral typeLiteral = new TypeLiteral<Service<Car>>() {};
> >>> >        ServiceImpl service = new ServiceImpl(clazz.getName()); // add
> types
> >>> >        (...)
> >>> >        bind(typeLiteral).toInstance(service);
> >>>
> >>> > }
> >>>
> >>> > in order to do the following in client code:
> >>>
> >>> > @Inject
> >>> > Service<SomeDomainClass> service;
> >>>
> >>> > does guice provide an equivalent way to accomplish this? i'm also
> >>> > asking here because lots of features have been added after 1.0. other
> >>> > ideas on how would you do this? maybe dead simple with standard
> >>> > reflection?
> >>>
> >>> > thanks!
> >>>
> >>> > francisco
> >> >
> >>
> >
> > >
> >
>
>
>
> --
> My LinkedIn profile: http://www.linkedin.com/in/simonetripodi
> My GoogleCode profile: http://code.google.com/u/simone.tripodi/
> My Picasa: http://picasaweb.google.com/simone.tripodi/
> My Tube: http://www.youtube.com/user/stripodi
> My Del.icio.us: http://del.icio.us/simone.tripodi
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"google-guice" 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-guice?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to