I'm experiencing some problems with implementing Guice / DI in the proper
way. I end up creating allot of a factories because I need objects with
specific settings that I only know at runtime. As an example, imaging the
following:
A connection object that can send/receive "something" and connects to a
host:port:
public Connection(String host, int port);
A http client that needs a connection:
public HttpClient(Connection connection);
Now, when I need a HttpClient in one of my objects (for example, a crawler)
I can't magically get that injected with the correct settings (host/port).
What I end up doing is creating factories for both the Connection and the
HttpClient:
public interface ConnectionFactory {
public Connection create(String host, int port);
}
public interface HttpClientFactory {
public HttpClient create(Connection connection);
}
And my constructors then look like this:
public Connection(@Assisted String host, @Assisted int port);
public HttpClient(@Assisted Connection connection);
And I have to inject both factories in, for example, my webcrawler to be
able to get a HttpClient:
class WebCrawler {
private final HttpClientFactory httpClientFactory;
private final ConnectionFactory connectionFactory;
@Inject
public WebCrawler(HttpClientFactory httpClientFactory,
ConnectionFactory connFactory) {}
public void someMethod() {
Connection conn = connectionFactory.create(host, port);
HttpClient client = httpClientFactory.create(conn);
....
}
}
With this, everything is injectable and "loosly" coupled, but I have the
feeling I'm missing the point somewhat. Instead of doing Connection = new
Connection(..) i changed everything to xxFactory.create(..) and I have
allot of factories injected in my classes. A second approach would be to
inject the connection factory into the HttpClient but that also smells as
"not the way to do it".
What am I not seeing?
--
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?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.