0

我有一个应用程序连接到多个站点,每个站点都有不同的用户名/密码对。我想要做的是连接依赖关系,这样我就可以说“只要你想要一个 FTPConnection,就使用这个连接”和“这个连接”取决于用户想要什么。

所以说我有一个像这样的类(伪 Google Guice 语法):

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

还有一个使用它的类

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

我想做的是在我想要 SomeFTPSiteProcessor 的实例时创建“当前活动”连接。

我该怎么做?我会使用范围吗?我会使用提供商吗?帮助!伪代码将不胜感激。

我希望这有点道理...

编辑:用户在运行时选择使用哪个 FTP 连接,因此我需要动态提供身份验证信息。这种语言让我想到了某种提供者,但我无法完全理解它是如何完成的。

谢谢

4

1 回答 1

0

这就是机器人腿问题。

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);
     }
}
于 2012-07-05T15:57:02.640 回答