If you feel uncomfortable injecting the concrete instances you can
delegate the responsibility to choose the correct instance to a
provider/helper.
The provider gets all concrete instances injected and has a method
getServiceFor(...) which returns the correct instance.
You have to pass to the method getServiceFor(...) the information which
is needed to make the decision which instance to choose.
On 02/24/2014 03:51 PM, sreenivasu puppala wrote:
Thank you !!
Can i get a sample example ?
Well, thats a good idea to inject concrete classes into the resource .
Could you also please send an example and if possible could you also
please tell me whether there any other ways of doing this?
Thanks
Sreeni
On Monday, February 24, 2014 11:52:32 AM UTC, Moandji Ezana wrote:
If you need a specific implementation and can determine which one
you need, I would inject both concrete classes into
OrganizationResource and not have to do anything fancy.
On Feb 24, 2014 1:18 PM, "sreenivasu puppala" <[email protected]
<javascript:>> wrote:
First of all thanks very much Tim for responding and sorry for
not giving the detailed information. Coming straight to the point
Iam working on webservices . Heres's the Flow
GET http://localhost:8182/indi/provide/organizations/{ou}
<http://localhost:8182/indi/provide/organizations/%7Bou%7D>
OrganizationsResource
-------->OrganizationService------>OrganizationServiceImpl
Iam binding OrganizationService with OrganizationServiceImpl
and injecting the OrganizationService in OrganizationsResource
@Inject
public void setOrganizationService(OrganizationService
orgService) {
this.orgService= orgService;
}
Its fine till here but i have two implementations for
OrganizationService --------->OrgDeatilsServiceImpl which does
some other job
Now i want to bind both OrganizationServiceImpl and
OrgDeatilsServiceImpl to OrganizationService
Confusions:
1) What procedure i have to use in Guice to bind two
implementaions?
2) How exactly i can code in OrganizationsResource to
dynamically decide which implementation to call.
I would appreciate if you give a sample example for the above
requirement.
Many thanks again for the quick reply and awaiting your
response on this mail.
Thanks
Sreni
On Thursday, February 20, 2014 5:30:52 AM UTC, Tim Boudreau
wrote:
You can do things like this with Guice 4's
ProvisionListener. I did that once, so that classes or
packages could be annotated with a "namespace" that
determined where properties they wanted injected would be
loaded from, to allow some legacy code I was helping
rearchitect code to migrate off of hard-coded paths to
things and manually loading configuration. See this:
http://j.mp/1dPIuGN
That being said, I've kind of regretted adding that
feature ever since :-)
But I don't think you need anything so general or complex.
It's not clear from your post what you want to switch on
to decide which implementation to provide. You don't want
to use @Named, but *something* has to choose which thing
to inject. So, where does the information live, which is
used to decide that? And does it change at runtime?
If it doesn't change at runtime, just give yourself a
command-line argument or whatever equivalent makes sense
for what you're doing (your class names above suggest some
kind of test mode, but I'm guessing). Have @ImplementedBy
pointing to a mock implementation, and only install the
module that binds the real implementation if that flag is
not there (or is there, whatever you want).
If it's something more fancy, I don't think anyone can
help you without knowing what information should be used
to decide what to inject, and what part of the application
has it. If you know what that is, all you need to do is
write a Provider that uses it.
-Tim
--
You received this message because you are subscribed to the
Google Groups "google-guice" group.
To unsubscribe from this group and stop receiving emails from
it, send an email to [email protected]
<javascript:>.
To post to this group, send email to
[email protected] <javascript:>.
Visit this group at
http://groups.google.com/group/google-guice
<http://groups.google.com/group/google-guice>.
For more options, visit
https://groups.google.com/groups/opt_out
<https://groups.google.com/groups/opt_out>.
--
You received this message because you are subscribed to the Google
Groups "google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
For more options, visit https://groups.google.com/groups/opt_out.
--
You received this message because you are subscribed to the Google Groups
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
For more options, visit https://groups.google.com/groups/opt_out.