2012-07-03 81 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