我有一个应用程序连接到多个站点,每个站点使用不同的用户名/密码对。我想要做的是连接依赖项,以便我可以说“无论何时你想要一个FTPConnection,使用这个连接”和“这个连接”取决于用户想要的任何东西。
所以说我有这样的类(伪Google Guice语法):
public class FTPConnection
{
FTPConnection(@Username String username, @Password String password)...
}
使用它的课程
public class SomeFTPSiteProcessor
{
SomeFTPSiteProcessor(@Inject FTPConnection)...
}
我想做的是每当我想要一个SomeFTPSiteProcessor实例时都会创建“当前活动”连接。
我该怎么做?我会使用示波器吗?我会使用提供商吗?救命!伪代码将是最受欢迎的。
我希望这有点意义......
编辑:用户可以选择在运行时使用哪个FTP连接,因此我需要动态提供身份验证信息。这种语言让我想到了各种各样的提供者,但我无法完全理解它是如何完成的。
由于
答案 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);
}
}