gpt4 book ai didi

dependency-injection - Guice 部分注入(inject)示例

转载 作者:行者123 更新时间:2023-12-04 23:26:52 25 4
gpt4 key购买 nike

这个例子取自一本关于 Dependency Injection 的书。 .

在第 87 页,有这个例子。

public class NewsletterManager {
private final List<Recipient> recipients;
private final DelivererFactory factory; // The book notes this as injected

public NewsletterManager(List<Recipient> rs, DelivererFactory factory) {
this.recipients = rs;
this.factory = factory;
}

public void send(Newsletter letter) {
for (Recipient recipient : recipients) {
Deliverer d = factory.forLetter(letter);
d.deliverTo(recipient);
}
}

}

我了解代码的用途,但我不明白的是如何实例化或配置我的 Module ,以便我可以创建此类的实例。

似乎 DelivererFactory被注入(inject)。示例没有说明如何,但让我们承认它是通过构造函数注入(inject)。在那种情况下,如何通过 List<Recipient> NewsletterManager 特有的实例我想要的实例?如何使用 Guice 实例化我的 NewsletterManager带有模块配置的 DelivererFactory和一个特殊的 List<Recipient>实例 ?

我不明白的是如何在构造函数的签名中同时自动注入(inject)对象和特定于实例的对象。在那种情况下,我看不到如何获得 NewsletterManager 的实例只有我的 List<Recipient> .我必须依赖工厂吗?在那种情况下, DelivererFactory 有什么用?注入(inject),因为我也必须在我的工厂注入(inject)它......

我希望我的问题足够清楚......

最佳答案

你是对的,这种注入(inject)只能通过工厂来解决。

如果您有 Foo(A a, B b)注入(inject) A 并在运行时传递 B,您将需要一个工厂 FooFactory.createFoo(B b) ,它内部包含对 A 的引用。

幸运的是,Guice 有@Assisted Injection 的概念。您必须提供工厂的接口(interface),但可以将实现的“魔力”留给 Guice。

它有很好的记录:https://github.com/google/guice/wiki/AssistedInject

您将需要对 com.google.inject.extensions » guice-assisted-inject 的额外依赖

关于dependency-injection - Guice 部分注入(inject)示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11545999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com