- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个类Property<T>
我想在我的应用程序启动后绑定(bind)。 Property<T>
表示 T
类型的属性其值可以在运行时修改。
我有可以这样注入(inject)的类:
public class MyClass {
public MyClass(@Named("someName") Property<String> property) {
...
}
}
我可以绑定(bind)这些实例,但只有在我的应用程序启动后我才需要知道所有 Named
这样做的注释值。
我已经开始查看 Elements
并访问所有 Element
实例找到它的所有 Binding
秒。一旦我有了 Bindings
, 我可以使用 InjectionPoint.forConstructor()
获取构造函数。
困扰我的是各种类型的绑定(bind)都有其差异。我必须处理访问 LinkedKeyBinding
, UntargettedBinding
, ETC..有没有更简单的方法来获取所有InjectionPoint
对于给定的模块列表?还是我做错了?
谢谢!
最佳答案
听起来您正在尝试注入(inject) @Named(foo) Property<bar>
对于所有 foo 和 bar 并在事后解决它们,Guice 做得不是特别好。因为 Guice 配置发生在运行时(必须运行 configure
方法),所以您可以将 Guice 的 SPI 用于您正在做的事情的唯一方法是先发制人地绑定(bind)所有键,这样 Guice 就不会提示对象不完整图表然后检查它以找出要填充的内容。这似乎费力且设计过度。
此外,只要 Guice 允许 JIT 或“隐式”绑定(bind),在请求对象之前,您无法知道 Guice 可能尝试解析的每个键。这可能会让你很难绑定(bind)你需要的一切,即使你有一个完美的模块或注入(inject)器反射库。如果您在创建注入(inject)器之前不知道您需要什么或什么可用,您也会绕过一些 Guice 的依赖关系图验证功能。
虽然这不是 Guice 和依赖注入(inject)概念的完美使用,但我会通过编写 PropertyOracle
来调整我的代码:
public class MyClass {
private final Property<String> someNameProperty;
public MyClass(PropertyOracle propertyOracle) {
someNameProperty = propertyOracle.getString("someName");
// The act of getting tells the oracle which properties to get. You can also
// separate those steps without holding onto an instance:
propertyOracle.prepare("keyToBeRequestedLater");
}
}
虽然这种类型的规定在某种程度上重复了 Guice,但与 Guice 不同的是,您可以注入(inject)具有您想要的任何类型或键的属性,然后稍后解析它——可能是异步的。然后,您将编写一个伪造的或模拟的 PropertyOracle 以在测试中使用,这不像直接注入(inject) Property 实例那么容易,但它可能是 Hook 请求的最简单方法,没有 Guice SPI 的复杂性。
关于java - Guice - 在运行时根据定义的注入(inject)点将泛型类绑定(bind)到实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40711358/
我是一名优秀的程序员,十分优秀!