Instance Bindings
You can bind a type to a specific instance of that type. This is usually only useful only for objects that don't have dependencies of their own, such as value objects:
bind(String.class)
.annotatedWith(Names.named("JDBC URL"))
.toInstance("jdbc:mysql://localhost/pizza");
bind(Integer.class)
.annotatedWith(Names.named("login timeout seconds"))
.toInstance(10);Avoid using .toInstance with objects that are complicated to create, since it can slow down application startup. You can use an @Provides method instead.
This is not a very helpful example, what is Names.named??
@martin, c.f. @Named in previous section
I am not sure why instance binding is not useful.
I can do this in BillingModule?:
Injector injector = Guice.createInjector(new DatabaseTransactionLogModule?());
TransactionLog? dbTransLog = njector.getInstance(DatabaseTransactionLog?.class);
bind(TransactionLog??.class).toInstance(dbTransLog);
With @provider, I am not sure whether you can pass Guice injected DatabaseTransactionLog? instance to BillingService? instance or not.
An example of bindConstant() would be helpful in the doc around here...
I'm using this to get different Cache objects from an Ehcache manager and I'm now wondering if .toInstance() would slow down anything. I could perfectly use it on the other hand to implement dynamic cache creation (based on my configuration properties).