2013-11-27 77 views
0

嘗試手冊(和可選)創建開始使用吉斯,並奮力看到我的使用情況如何適用吉斯國際奧委會:一個單身

我有一個命令行應用程序,這需要幾個可選。參數。

比方說,我已經得到了工具顯示一個客戶的訂單,例如

order-tool display --customerId 123 

這顯示了客戶ID爲123現在擁有的所有訂單,用戶還可以指定用戶名:

order-tool display --customerName "Bob Smith" 

但是查詢訂單的界面依賴於客戶ID。因此,我們需要從客戶名稱映射到客戶ID。爲此,我們需要連接到客戶API。因此,用戶必須指定:

order-tool display --customerName "Bob Smith" --customerApi "http://localhost:8080/customer" 

當啓動應用程序時,我想分析所有的參數。在指定--customerApi的情況下,我想放置CustomerApi單在我的IoC上下文中 - 這是通過與API URL的CLI ARG參數。

然後,當代碼運行,顯示按名稱的客戶 - 它要求的情況下,如果它有一個CustomerApi單。如果沒有它拋出一個異常,告訴他們需要指定--customerApi,如果他們想使用--customerName的CLI用戶。但是,如果創建了一個 - 那麼它只是從IoC上下文中檢索它。

回答

1

這聽起來像「可以創建一個單身」不正是你想在這裏做什麼。我的意思是,它是,但那是一樣簡單:

if (args.hasCustomerApi()) { 
    bind(CustomerApi.class).toInstance(new CustomerApi(args.getCustomerApi())); 
} 

要允許可選的綁定,你可能需要annotate their use with @Nullable

我認爲你真正的問題是如何構建的應用程序,讓您可以部分配置它,使用配置來讀取和驗證了一些命令行標誌,然後用標誌來完成配置您的應用程序。我認爲最好的方式是使用兒童注射器。

public static void main(String[] args) { 
    Injector injector = Guice.createInjector(new AModule(), new BModule(), ...); 
    Arguments arguments = injector.getInstance(ArgParser.class).parse(args); 
    validateArguments(arguments); // throw if required arguments are missing 
    Injector childInjector = 
     injector.createChildInjector(new ArgsModule(arguments)); 
    childInjector.getInstance(Application.class).run(); 
} 

Child injectors就像是聽從父母,如果他們不包含給定綁定本身正常噴射。您也可以閱讀how Guice resolves bindings上的文檔。