On Jan 26, 7:01 pm, Bob Lee <[email protected]> wrote: > An XML config wouldn't add any value, so no one has bothered to implement > it
I also don't believe that an XML configuration is a very good solution. But I don't agree that it wouldn't add any value. (1) XML would make it possible to generate a graph or do some modeling even before the first line of code has been written. This doesn't matter to me - for me the grapher in Guice is more than good enough. But for a team with people that aren't willing to learn Java (but still believe they can wire a system up front) it could be an advantage. Ok, that's theoretical. But how about this: (2) This is based on the "Robot legs problem" (http://code.google.com/ docreader/#p=google-guice&s=google-guice&t=FrequentlyAskedQuestions): How to inject different things into the same point. public Leg(Foot foot) { ... } To get a different foot for the left and right leg you'll need private modules, as is described in the FAQ. While private modules are very powerful, I'd argue that the XML solution is a lot easier to read here. But ok, it's a workable solution. However, what about recursive structures? Let's make a simple, rather synthetic example first: Try modeling the expression "3 * 4 * 7" according to this simple spec: Expr = Literal | Literal * Expr If you bind Literal to "3", you'll get the expression "3 * 3 * 3 * ...". You can't arrive at "3 * 4 * 7", no matter which binding annotations (Qualifiers) you use. I also don't see a solution with private modules for this (correct me if I'm wrong). In contrast, a structure like this is not only possible, but also fairly easy to read with XML, schematically: <expr> <literal value="3"/> <expr> <literal value="4"/> <expr> <literal value="5"/> </expr> </expr> </expr> I'm afraid that such recursive structures can actually appear in real life examples, where wiring with dependency injection makes sense: Imagine you write a system that manages a network of routers. Each router can be connected to a set of other routers... So while (1) is not a problem for me, I'm still afraid that (2) might bite me someday. Don't get me wrong, I strongly prefer the Guice approach over the XML approach, but I can imagine situations where it won't work. The good news is, that this doesn't create a dead-end, because Guice allows me to fall back to manual wiring for the problematic object and encapsulate it in a provider. Chris -- 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.
