Take a look at MapBinder or Multibinder:
https://github.com/google/guice/wiki/Multibindings

sam

On Mon, Mar 16, 2015 at 11:42 AM Barak Yaish <[email protected]> wrote:

> Thanks. Is there a way to overcome the exhausting if-else if- else if
> structure, some magical way to support new crawlers in the system without
> "register" them in that factory?
>
>
> On Monday, March 16, 2015 at 3:57:56 PM UTC+2, Laszlo Ferenczi wrote:
>
>> Hi,
>>
>> There are many ways to solve this problem, one easy enough to understand:
>>
>> @Inject
>> Provider<CrawlerOne> crawlerOneProvider;
>>
>> @Inject
>> Provider<CrawlerTwo> crawlerTwo;
>>
>>
>> public Crawler getCrawler(String url) {
>>     if (url...) {
>>         return crawlerOneProvider.get();
>>     }
>>     else {
>>         return crawlerTwoProvider.get();
>>     }
>> }
>>
>>
>> As an alternative you can inject the injector itself and get the instance
>> from it.
>>
>> Also a slightly more advanced, but much more elgant way is to use
>> AssistedInject (it's exectly for this use case) See the guice docs for more
>> info.
>>
>> PS: no need to make everything static, the whole point of the DI
>> framework that you don't need static anchors in your code.
>>
>> --
>> L
>>
>
>> --
>> L
>>
>> On Sun, Mar 15, 2015 at 4:37 PM, Barak Yaish <[email protected]> wrote:
>>
> Hi,
>>>
>>> Doing my first steps with Guice, I thought the fastest way to understand
>>> it would migrate parts of existing application to Guice style. The
>>> application is kind of web crawler, and I have factory creating crawlers
>>> based on the input url:
>>>
>>> public static Crawler getCrawler( String url )
>>> {
>>> try
>>> {
>>> if( url.contains( "www.site1.com" ) )
>>> return new Site1( AppConfig.getInstance() );
>>> else if( url.contains( "www.site2.com" ) )
>>> return new Site2( AppConfig.getInstance() );
>>> }
>>> catch ( Exception e )
>>> {
>>> logger.error( "failure", e );
>>> }
>>>
>>> return null;
>>> }
>>>
>>>
>>> Is the Guice version is only take the crawler instances from the
>>> injector and injecting the AppConfig?
>>>
>>> public static Crawler getCrawler( String url )
>>> {
>>> try
>>> {
>>> if( url.contains( "www.site1.com" ) )
>>> return GuiceInjector.getInstance( Site1.class );
>>> else if( url.contains( "www.site2.com" ) )
>>> return GuiceInjector.getInstance( Site2.class );
>>> }
>>> catch ( Exception e )
>>> {
>>> logger.error( "failure", e );
>>> }
>>>
>>> return null;
>>> }
>>>
>>> Is there a better and/or more elegant way?
>>>
>>> Thanks!
>>>
>>  --
>>> You received this message because you are subscribed to the Google
>>> Groups "google-guice" group.
>>>
>> To unsubscribe from this group and stop receiving emails from it, send an
>>> email to [email protected].
>>> To post to this group, send email to [email protected].
>>
>>
>>> Visit this group at http://groups.google.com/group/google-guice.
>>> To view this discussion on the web visit https://groups.google.com/d/
>>> msgid/google-guice/8911e587-58bd-4631-80a2-7a5d91007431%
>>> 40googlegroups.com
>>> <https://groups.google.com/d/msgid/google-guice/8911e587-58bd-4631-80a2-7a5d91007431%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>  --
> You received this message because you are subscribed to the Google Groups
> "google-guice" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/google-guice.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/google-guice/c809db73-6456-493c-8047-95543ee382ef%40googlegroups.com
> <https://groups.google.com/d/msgid/google-guice/c809db73-6456-493c-8047-95543ee382ef%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-guice/CAJEBNUdf-ihw7Fc67Rno2-k5-_wrfShBjK5Tn7FbNHq0dxLcGg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to