吉斯提供綁定到供應商的方式:如何綁定到Guice中的CheckedProvider?
bind(A.class).toProvider(AProvider.class);
雖然如果我的供應商需要拋出一個異常,那麼它似乎CheckedProvider是一個正確的基本接口:
public interface ConfigCheckedProvider<T> extends CheckedProvider<T> {
T get() throws ConfigException;
}
public AProvider implements ConfigCheckedProvider<A> { ... }
但現在我的一些類需要注入A的實例。而我無法改變。但它看起來像Provider方法不接受CheckedProvider類型。
我如何使用基於CheckedProvider的提供者來注入實例而不是提供者?
這不會破壞'@ CheckedProvider'的目的嗎?如何注入一個實例拋出異常?我認爲如果你想注入實例,你必須切換到一個普通的'Provider'實現(並且只拋出運行時異常)。 – condit
@CheckedProvider不適用於類的提供者。普通的舊提供程序不允許異常拋出。問題是:如何讓提供者在單獨的類中(大的初始化邏輯)並允許此提供者拋出異常。但最終目標不是注入提供者,而是注入提供者提供的實例。 – vladimir
@vladimir,你不能那樣做。被檢查的提供者完全是爲了不直接注入對象而創建的,因爲它們的創建可能會失敗,並且這個失敗必須由程序代碼來處理。如果您不想處理創建失敗,那麼您可以使用普通提供程序,並在某些運行時異常中將所有已檢查的異常包裝在'get()'中。 –