Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [sisu-users] watching injected components

On 1 Mar 2014, at 21:00, Igor Fedorenko <igor@xxxxxxxxxxxxxx> wrote:

> I played with ProvisionListener earlier toda and it did not do what I
> need.
> 
> From what I understood, ProvisionListener is invoked on component
> provisioning, i.e. instance creation, not component injection. Going
> back to my example, if ComponentA is @Singleton, ProvisionListener
> will be called only once for the ComponentA instance even if it is
> injected in multiple ComponentB instances.

I believe it is called per-injection request (aka provisioning) not per-construction, but I might be mis-remembering. It’s definitely more than per-construction, but that might be because it’s reporting each link as it follows the dependency chain. There is no other API that lets you intercept the injection of a specific member, but if you describe your use-case in more detail you might not need this at all because there may be alternative solutions.

> I also looked at InjectionListener, which is invoked on each ComponentA
> injection, but I could not find a way to locate target ComponentA instance.
> 
> Have I misunderstood the API?
> 
> --
> Regards,
> Igor
> 
> On 2014-03-01, 15:37, Stuart McCulloch wrote:
>> On 1 Mar 2014, at 19:26, Igor Fedorenko <igor@xxxxxxxxxxxxxx> wrote:
>> 
>>> Say I have a couple of components, ComponentA and ComponentB
>>> 
>>>   @Named
>>>   class ComponentA {}
>>> 
>>>   @Named
>>>   class ComponentB {
>>>      @Inject
>>>      ComponentA a;
>>>   }
>>> 
>>> Does sisu (or guice for that matter) provide a way to observe injection
>>> of ComponentA instances into ComponentB instances?
>>> 
>>> To give some context, I develop a maven extension that needs to track
>>> what objects are injected in Mojo instances and it needs to have
>>> per-Mojo breakdown of all injected components.
>> 
>> The API that comes closest is probably the Guice ProvisionListener API:
>> 
>> 	https://code.google.com/p/google-guice/source/browse/core/src/com/google/inject/spi/ProvisionListener.java
>> 
>> This lets you intercept the provisioning of any objects initiated by Guice and also provides the dependency chain that led to the object being provisioned - you’ll need to drill down the chain into the Dependency then the InjectionPoint if you want to know the exact declaring type and member (constructor, method, field etc.)
>> 
>> You can bind a listener for all bindings as follows:
>> 
>> 	bindListener(Matchers.any(), myProvisionListener);  // you can narrow down the matching if you know what bindings you’re interested in
>> 
>> 	https://code.google.com/p/google-guice/source/browse/core/src/com/google/inject/Binder.java#379
>> 
>> See also https://code.google.com/p/google-guice/issues/detail?id=78#c16
>> 
>>> --
>>> Regards,
>>> Igor
>>> _______________________________________________
>>> sisu-users mailing list
>>> sisu-users@xxxxxxxxxxx
>>> https://dev.eclipse.org/mailman/listinfo/sisu-users
>> 
>> _______________________________________________
>> sisu-users mailing list
>> sisu-users@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/sisu-users
>> 
> _______________________________________________
> sisu-users mailing list
> sisu-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/sisu-users



Back to the top