JCatapult also uses Guice for everything. It uses a single injector that is created in a ServletContext listener. It uses Guice 1.0, but I'm planning on updating to Guice 2.0 at some point. It should be a simple update and possibly just a dependency switch.
-bp On Aug 7, 2009, at 11:36 AM, Brandon Atkinson wrote: > Adrian, > > That does help, especially with the reference to the jclouds > project. A real world example will help greatly. > > Thanks, > -Brandon > > > On Fri, Aug 7, 2009 at 12:51 PM, Adrian Cole <[email protected]> > wrote: > Hi, Brandon. > > jclouds is a heavy user of guice and internally uses about 350 > classes (excluding unit tests). The way we work is that we create a > context into our framework, which implies creation of an injector. > Where needed (rarely), Injectors are injected into classes. > > Getting this context is performed one of two ways: > > 1. Builder that accepts external parameters like Guice constants or > other Guice Modules needed, then builds an injector from them. > > Ex. > public Injector buildInjector() { > > useDefaultPortIfNotPresent(properties); > > addLoggingModuleIfNotPresent(modules); > > addParserModuleIfNotPresent(modules); > > addConnectionModuleIfNotPresent(modules); > > addHttpModuleIfNeededAndNotPresent(modules); > > addExecutorServiceIfNotPresent(modules); > > modules.add(new AbstractModule() { > @Override > protected void configure() { > Names.bindProperties(binder(), checkNotNull(properties, > "properties")); > } > }); > addContextModule(modules); > > return Guice.createInjector(modules); > } > > 2. Static factory method that creates a context with minimum input > using the above builder. > > public static S3Context createS3Context(String awsAccessKeyId, > String awsSecretAccessKey, > Module... modules) { > return S3ContextBuilder.newBuilder(awsAccessKeyId, > awsSecretAccessKey).withModules(modules) > .buildContext(); > } > > > I hope this helps. > Cheers, > -Adrian > jclouds > > > On Fri, Aug 7, 2009 at 7:56 AM, Brandon Atkinson > <[email protected] > > wrote: > I'm looking for a little guidance on cleanly architecting a Guice > based project. > > I'm new to DI and Guice, but after reading the docs and the Apress > Guice book, I'm still a bit confused about how to architect > applications to use Injectors properly. Is it common practice to > have only a single Injector for an application, and pass the > Injector around? If so, should I be injecting the injector, or > using an application wide static factory method? > > What might be helpful is an example of a cleanly implemented Guice > project that is larger than two or three classes. > > Looking for a little guidance... > > -Brandon > > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
