2016-07-19 3 views
1

Я новичок в выборе.Guice: Резервирование по умолчанию по конкретному состоянию

У меня есть файл (файл json), в котором я определил некоторые данные. Это необязательно. Я должен прочитать данные из файла (используя FileBasedImpl), если файл существует. В противном случае я должен получить данные из класса «DefaultImpl», где я возвращаю жестко кодированные данные.

Как достичь этого из привязок?

interface SomeService { 
    Map<String, String> getData(); 
} 

class FileBasedImpl implements SomeService { 
    /* Reads from a file */ 
    Map<String, String> getData() { 
     //Check if file is present, then read the data 
    } 
} 

class DefaultImpl implements SomeService { 
    /* Returns hard-coded data */ 
    Map<String, String> getData() { 
    return new HashMap()<>..; 
    } 
} 

ответ

1

Вы можете создать поставщик (либо путем реализации интерфейса или добавления обеспечивает метод модуль), который пытается прочитать содержание и обеспечить один или другой компонент в зависимости от результата:

... 
@Provides 
public SomeService someService() { 
    File file = ....; 
    return (file.exists) ? new FileBasedImpl(file) : new DefaultImpl(); 
} 
... 

Будьте осторожны, условная логика в модулях - это documented anti-pattern. Но в таких случаях это хорошее и эффективное решение, которое время от времени должно быть сделано ...

Смежные вопросы