sorry for pushing this... why do I give the provider and not the object of interest ? I'm confused about this and the Law of Demeter... Now the application has to get its object ...
is it because the get method could do some magic behind that the returned objects are different instances or even different classes ? thanks On 15 Aug., 13:34, Dan Godfrey <[email protected]> wrote: > 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 -~----------~----~----~----~------~----~------~--~---
