2012-07-03 2 views
0

У меня есть приложение, которое подключается к нескольким сайтам с другой парой имени пользователя и пароля для каждого. Я хочу, чтобы это зависало, так что я могу сказать «всякий раз, когда вы хотите использовать FTPConnection, используйте это соединение», и «это соединение» зависит от того, что хочет пользователь.Ввод информации аутентификации

Так что у меня есть класс, как этот (псевдо-Google синтаксис Guice):

public class FTPConnection 
{ 
    FTPConnection(@Username String username, @Password String password)... 
} 

И класс, который использует его

public class SomeFTPSiteProcessor 
{ 
    SomeFTPSiteProcessor(@Inject FTPConnection)... 
} 

То, что я хотел бы сделать, это есть " в настоящее время активное "соединение создается всякий раз, когда мне нужен экземпляр SomeFTPSiteProcessor.

Как мне это сделать? Я бы использовал область? Я бы использовал провайдера? Помогите! Псевдокод был бы наиболее оценен.

Я надеюсь, что это имеет некоторый смысл ...

Edit: Пользователь делает выбор которого FTP соединение, чтобы использовать во время выполнения и поэтому мне нужна информация о проверке подлинности, чтобы быть предоставлен динамически. Язык заставляет меня думать о каком-то провайдере, но я не могу полностью окунуться в то, как это будет сделано.

Благодаря

ответ

0

Это Robot Legs проблема.

public class SomeFTPSiteProcessor 
{ 
    SomeFTPSiteProcessor(@JeffsFtpServer FTPConnection)... 
} 

public class SomeOtherFTPSiteProcessor 
{ 
    SomeFTPSiteProcessor(@FredsFtpServer FTPConnection)... 
} 

class FtpModule extends PrivateModule { 
    String username; 
    String password; 
    Class<? extends Annotation> annotation; 

    void configure() { 
     bind(String.class).annotatedWith(Username.class).with(username); 
     bind(String.class).annotatedWith(Password.class).with(password); 
     expose(FTPConnection.class).annotatedWith(annotation); 
    } 
} 
Injector injector = Injector.createInjector(
    new FtpModule("fred", "password", FredsFtpServer.class), 
    new FtpModule("jeff", "password", JeffsFtpServer.class)); 

Я думаю, что вы бы нужен завод тогда. Вероятно, на этом заводе есть экземпляр инжектора.

class ThingieFactory() { 
    @Inject Injector injector; 

    SomeFTPSiteProcessor create(params...) { 
      return injector.createChild(new Module() { set params; }).get(SomeFTPSiteProcessor.class); 
    } 
} 
+0

Но это компиляция. Мне нужно, чтобы это было переменной во время выполнения. Вместо немного разных экземпляров ножек робота, подумайте о числе ног (например), являющихся значением, переданным пользователем графического интерфейса пользователя. Таким образом, имя пользователя и пароль неизвестны во время компиляции и известны только через некоторое время после того, как инжектор создал корневой объект. Имеет ли это смысл? – cheez

+0

Думаю, вам понадобится фабрика. Вероятно, на этом заводе есть экземпляр инжектора. –

+0

Дорогой бог нет ... Ничего, кроме этого. Должен быть способ сделать это. Как другие приложения обрабатывают инъекцию «текущего пользователя»? Я думаю, что это очень похоже на это. – cheez

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