I'm building some kind of framework and the developers have to specify the
type of server they want to use. The *IServer<?>* is the interface of the
server : it is parametized.
The framework itself only needs the wildcard version of the *IServer<?>*
instance
to be injected in its classes. In fact, it doesn't even know the type of
the Server that will actually be used. So :
bind(new TypeLiteral<IServer<?>>(){}).to(getServerClass()).in(Scopes.
SINGLETON);
The dev would define *a getServerClass()* method like :
protected Class<? extends IServer<?>> getServerClass() {
return SomeServer.class; // SomeServer implements IServer<
*TheTypeTheDevWants*>
}
But the dev will also need a *typed* version, *IServer<TheTypeTheDevWants>*,
to be injected in *his* classes. So :
bind(new TypeLiteral<IServer<*TheTypeTheDevWants*
>>(){}).to(getServerClass()).in(Scopes.SINGLETON);
First question : does this actual create two instances or only one? Two I
guess and this is my first problem. How could I bind the same instance to
both types?
Second question :
Would it be possible to ask the dev to define a *getServerType()* method,
that would return "*TheTypeTheDevWants*", in a way or another, so the
framework can use it to create the two bindings *by itself*? Something like
:
bind(new TypeLiteral<IServer<?>>(){}).to(getServerClass()).in(Scopes.
SINGLETON);
bind(new TypeLiteral<IServer<*getServerType**()*>>(){}).to(getServerClass
()).in(Scopes.SINGLETON); // Black magic required here!
Is there any way for the framework to bind *IServer<TheTypeTheDevWants>*
dynamically,
without knowing "*TheTypeTheDevWants*" at compile time?
I try to make the life easier for the dev. I'd like the framework to do
both binding by itself here. Is it possible?
I hope my questions makes sense! :-)
--
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 https://groups.google.com/group/google-guice.
To view this discussion on the web visit
https://groups.google.com/d/msgid/google-guice/ba246448-6640-4a4b-bb6c-f823509b8d9e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.