注入身份验证信息

时间:2012-07-03 02:54:23

标签: dependency-injection guice

我有一个应用程序连接到多个站点,每个站点使用不同的用户名/密码对。我想要做的是连接依赖项,以便我可以说“无论何时你想要一个FTPConnection,使用这个连接”和“这个连接”取决于用户想要的任何东西。

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

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

使用它的课程

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

我想做的是每当我想要一个SomeFTPSiteProcessor实例时都会创建“当前活动”连接。

我该怎么做?我会使用示波器吗?我会使用提供商吗?救命!伪代码将是最受欢迎的。

我希望这有点意义......

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

由于

1 个答案:

答案 0 :(得分: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);
     }
}