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 google-guice+unsubscr...@googlegroups.com.
To post to this group, send email to google-guice@googlegroups.com.
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.

Reply via email to