我有一个通过@JsonAdapter
注解使用自定义json序列化器的类:
import com.google.gson.annotations.JsonAdapter;
@JsonAdapter(IFooAdapter.class)
public interface IFoo {
//...
}
IFooAdapter
类对应该注入的IMyFactory
具有依赖关系。
通过Guice.CreateInjector()
和bind(IMyFactory.class).to(MyFactoryImpl.class);
配置注入。
但是我如何才能让guice将它注入到我的IFooAdapter类(如下所示)中呢?这个类只在@JsonAdapter
注解中使用(如上所示)。
import com.google.gson.JsonElement;
import com.google.gson.TypeAdapter;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import com.google.inject.Inject;
public class IFooAdapter implements TypeAdapter<IFoo> {
@Inject IMyFactory myFactory; // <-- THIS INJECTION DOES NOT WORK
@Override public IFoo read(JsonReader in) {
return myFactory.create(/*...*/);
}
@Override public void write(JsonWriter out, IFoo value) {
//...
}
}
通过guice.InjectMembers(myMainClass)
注入后,当我尝试通过GsonBuilder().create().fromJson()
解析json并调试IFooAdapter.read()
时,myFactory为空。
(这并不奇怪,毕竟IFooAdapter不是myMainClass的成员)
但我该如何正确注射呢?
1条答案
按热度按时间eagi6jfj1#
您可以尝试通过类似以下的方式为适配器注册
InstanceCreator
你需要在一个地方创建
Gson
示例,在那里你可以访问注入器(我会像@Provides
方法那样为Gson
示例提供Injector
参数,然后在需要的地方注入Gson
)。