我目前正试图在我的resteasy解决方案中实施Guice。 使用静态方法8个月后...我不得不改变以实现正确的单元测试。 我成功地引导了一小段代码工作。而且我完全理解DI过程。
我希望通过业务逻辑进一步实施,但我已经陷入困境,而且我不知道如何通过Guice实现这一点。
我的应用程序有一个单例名称Metamodel,用于Guice的示例构建并包含Element的映射
有我的Metamodel
@Singleton
public class MetamodelImpl implements Metamodel{
Map<String, Element> elements;
public MetamodelImpl(){
// load data from XML files in order to create my Elements
// using new Element1() etc... function of the type.
}
public Element getElement(String name){
return elements.get(name);
}
}
然后,这是我的Element抽象类,Element可以包含其他元素,目的是调用generateResult以生成RestWrapper(json结果,但我们不要卡尔)。
public abstract class Element{
List<Element> elements;
public RestWrapper generateResult(Context context){
RestWrapper restWrapper = new RestWrapper();
for (Element element : elements) {
restWrapper.add(element.generateResult(context));
}
return restWrapper;
}
}
有一个实施的例子。
public class Element1{
public RestWrapper generateResult(Context context){
RestWrapper restWrapper = super.generateResult(context);
// Add some custom logic using services
// old code with static use
Object object = ServiceExample.getResult(property, context);
// Wanted, by injecting the service, but I can't inject service on element that I create...
Object object = serviceExampleImpl.getResult(property);
}
}
Context是一个Guice对象,包含我当前的用户和其他一些东西。我可能会看到我的问题是在元素的generateResult方法上,我必须调用一些现在已经实现Guice的服务。例如:
public class ServiceExampleImpl implements ServiceExample{
@Inject
Context context;
public Object getResult(String property){
return ...
}
}
我该怎么办?如何使用Guice构造元素?并使上下文动态...