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 に答える