+1

On Thu, Nov 10, 2011 at 3:44 PM, Vincent Massol <vinc...@massol.net> wrote:
> 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
>



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

Reply via email to