Status: New
Owner: ----

New issue 308 by bslesinsky: constructor injection gives better errors than  
field injection for circular dependency
http://code.google.com/p/google-guice/issues/detail?id=308

When using field injection, the field was set to null and I got:

1) Error in custom provider, java.lang.NullPointerException

When I changed it to use constructor injection, I got much better errors  
like:

1) Tried proxying com.google.jsearch.project.ProjectRegistry to support a
circular dependency, but it is not an interface.
... shows the circular dependency ...

2) Error injecting constructor, java.lang.IllegalStateException: This is a
proxy used to support circular references involving constructors. The
object we're proxying is not constructed yet. Please wait until after
injection has completed to use this object.

This was with r734.

Here's the stack trace for field injection:

        at 
com.google.inject.BoundProviderFactory.get(BoundProviderFactory.java:58)
        at
com.google.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43)
        at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:847)
        at
com.google.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
        at com.google.inject.Scopes$1$1.get(Scopes.java:49)
        at
com.google.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:46)
        at
com.google.inject.SingleParameterInjector.inject(SingleParameterInjector.java:41)
        at
com.google.inject.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
        at
com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:90)
        at
com.google.inject.InjectorImpl$LateBoundConstructor.get(InjectorImpl.java:447)
        at
com.google.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43)
        at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:847)
        at
com.google.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
        at com.google.inject.Scopes$1$1.get(Scopes.java:49)
        at
com.google.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:46)
        at com.google.inject.InjectorImpl$3.get(InjectorImpl.java:526)
        at
com.google.inject.SingleParameterInjector.inject(SingleParameterInjector.java:41)
        at
com.google.inject.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
        at
com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:90)
        at
com.google.inject.InjectorImpl$LateBoundConstructor.get(InjectorImpl.java:447)
        at
com.google.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43)
        at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:847)
        at
com.google.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
        at com.google.inject.Scopes$1$1.get(Scopes.java:49)
        at
com.google.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:46)
        at  
com.google.inject.SingleFieldInjector.inject(SingleFieldInjector.java:54)
        at
com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:103)
        at
com.google.inject.InjectorImpl$LateBoundConstructor.get(InjectorImpl.java:447)
        at 
com.google.inject.BoundProviderFactory.get(BoundProviderFactory.java:56)
        at
com.google.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43)
        at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:847)
        at
com.google.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
        at com.google.inject.Scopes$1$1.get(Scopes.java:49)
        at
com.google.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:46)
        at com.google.inject.InjectorBuilder$1.call(InjectorBuilder.java:200)
        at com.google.inject.InjectorBuilder$1.call(InjectorBuilder.java:194)
        at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:839)
        at
com.google.inject.InjectorBuilder.loadEagerSingletons(InjectorBuilder.java:194)
        at
com.google.inject.InjectorBuilder.injectDynamically(InjectorBuilder.java:175)
        at com.google.inject.InjectorBuilder.build(InjectorBuilder.java:115)
        at com.google.inject.Guice.createInjector(Guice.java:92)
        at com.google.inject.Guice.createInjector(Guice.java:69)
        at com.google.inject.Guice.createInjector(Guice.java:59)



--
You received this message because you are listed in the owner
or CC fields of this issue, or because you starred this issue.
You may adjust your issue notification preferences at:
http://code.google.com/hosting/settings

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"google-guice-dev" 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-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to