Hi devs,

I've started investigating this. The documentation for Provider can be found 
here:
http://code.google.com/p/atinject/source/browse/trunk/src/javax/inject/Provider.java

Here's we would define a provider:

@Component
public class MyProvider implements Provider<RoleToProvide>
{
    @Inject <-- just to show that a provider is a component and be injected 
other components
    private SomeRole role;

    @Override
    public RoleToProvide get()
    {
        … logic here to return a RoleToProvide instance…
    }
}

And here's how you'd use it:

@Component
public class MyComponent implements MyRole
{
…
    @Inject
    private Provider<RoleToProvide> provider;
…
    public void someMethod()
    {
        RoleToProvide instance = this.provider.get();
…

Rationale:
=========

* UC1: Useful to break cyclic dependencies in a cleaner way than having the 
ComponentManager injected, especially since the Provider can be reused since 
it's shared
* UC2: Useful to clean up code so that the logic to decide which implementation 
to return can be externalized in a Provider implementation. For example imagine 
you have a config property in xwiki.properties and based on it you wish to 
return a component with one hint or another. You could use a Provider for this.
* Allows us to be JSR330 compliant (not a very strong point but still an 
argument ;))

Default Provider
=============

When you ask to get injected a Provider if no Provider is defined for the Role 
you wish, you'll get injected a generic provider which simply does a lookup 
using the Component Manager. This allows to simply implement UC1.

WDYT?

Thanks
-Vincent

_______________________________________________
devs mailing list
devs@xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to