Guice will generate the provider for you automatically, based off the
binding to LogFileEntry.

On Aug 14, 7:18 pm, Brandon Atkinson <[email protected]>
wrote:
> The point of confusion might be that you're expecting Guice to generate a
> Provider.  It is you who has to write an implementing Provider<LogFileEntry>
> class.
> You then need to tell Guice to use a certain Provider when asked for a
> certain class.
>
> For instance, you'd implement one Provider for clear text log files:
>
> public class ClearTextLogFileEntryProvider implements Provider<LogFileEntry>
> {
>     public LogFileEntry get() {
>          return new ClearTestLogFileEntry();
>     }
>
> }
>
> or one for encrypted log files:
>
> public class EncryptedLogFileEntryProvider implements Provider<LogFileEntry>
> {
>     public LogFileEntry get() {
>         return new EnctryptedLogFileEntry();
>     }
>
> }
>
> There is no magic here, so you have to tell Guice when to use which
> Provider:
>
> Guice.createInjector(new Module() {
>     public void configure(Binder binder) {
>
>  binder.bind(LogFileEntry.class).toProvider(ClearTextLogFileProvider.class);
> //use clear text logs
>     }
>
> });
>
> With the above binding, you're telling Guice that the
> ClearTextLogFileProvider.class is the source of LogFileEntry's.  When the
> Injector encounters a class requiring a LogFileEntry or
> LogFileEntryProvider, it will use ClearTextLogFileProvider.  For instance:
>
> public class SomethingInteresting {
>    private Provider<LogFileEntry> provider;
>    private LogFileEntry log;
>
>     /*
>      * The ClearTextLogFileProvider.class would be used
>      * when injecting both of the following dependencies
>      */
>   �...@inject SomethingInteresting( Provider<LogFileEntry>
> logFileEntryProvider, LogFileEntry log) {
>         this.provider = logFileEntryProvider;
>         this.log = log;
>     }
>
> }
>
> Hope that helps.
>
> -Brandon
>
> On Fri, Aug 14, 2009 at 3:47 AM, Anthony MULLER 
> <[email protected]>wrote:
>
> > The "Provider<LogFileEntry>" instance is injected in the constructor and
> > set as an attribute of the LogFileTransactionLog object.
>
> > After, that depends on how is implemented the provider itself. When get()
> > method is called, the provider implementation can return a new instance
> > LogFileEntry, or always the same (quite strange in this case ?)
>
> > What's your problem about that?
>
> > Anthony MÜLLER
>
> > 2009/8/14 zhaoyi <[email protected]>
>
> >> Can anyone help me on this? thanks.
>
> >> On Aug 10, 2:38 am, zhaoyi <[email protected]> wrote:
> >> > I have read the article "Providers for multiple instances" in this
> >> > linkhttp://code.google.com/p/google-guice/wiki/InjectingProviders.
> >> > The example shown is:
> >> > public class LogFileTransactionLog implements TransactionLog {
>
> >> >   private final Provider<LogFileEntry> logFileProvider;
>
> >> >   @Inject
> >> >   public LogFileTransactionLog(Provider<LogFileEntry> logFileProvider)
> >> > {
> >> >     this.logFileProvider = logFileProvider;
> >> >   }
>
> >> >   public void logChargeResult(ChargeResult result) {
> >> >     LogFileEntry summaryEntry = logFileProvider.get();
> >> >     summaryEntry.setText("Charge " + (result.wasSuccessful() ?
> >> > "success" : "failure"));
> >> >     summaryEntry.save();
>
> >> >     if (!result.wasSuccessful()) {
> >> >       LogFileEntry detailEntry = logFileProvider.get();
> >> >       detailEntry.setText("Failure result: " + result);
> >> >       detailEntry.save();
> >> >     }
> >> >   }
>
> >> > There are two places to call logFileProvider.get() method. Are they
> >> > return the same type of LogFileEntry? If they return different type of
> >> > LogFileEntry, how does logFileProvider know which type is requested?
>
> >> > thanks.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to