2012-07-03 43 views
0

我有一个应用程序连接到多个网站与每个不同的用户名/密码对。我想要做的就是连接依赖关系,这样我就可以说“只要你想要一个FTPConnection,使用这个连接”和“这个连接”就取决于用户想要的任何东西。注入认证信息

所以说,我有这样的(伪谷歌吉斯语法)类:

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

和使用它

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

我愿做一类是具有“当前有效的“连接将被创建,只要我想要一个SomeFTPSiteProcessor的实例。

我该怎么做?我会使用范围吗?我会使用提供者吗?帮帮我!伪代码将非常感谢。

我希望这是有道理的......

编辑:用户对其中的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

但这是一个编译时的事情。我需要这个在运行时是可变的。而不是稍微不同的机器人腿的实例,想想腿的数量(例如)是GUI用户传入的值。所以用户名和密码在编译时是不知道的,只有在注入器创建了根对象之后的某个点才知道。那有意义吗? – cheez

+0

我想你会需要一个工厂。可能与该工厂有一个喷油器的实例。 –

+0

亲爱的上帝没有......除此之外。必须有一种方法来做到这一点。其他应用程序如何处理“当前用户”注入?我认为这非常相似。 – cheez