吉斯提供绑定到供应商的方式:如何绑定到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()'中。 –