我是一个tapestry5用户,对扩展类中的服务使用有疑问。可以说我有以下类结构,
BaseClass的
public class BaseClassImpl extends ExtendedOneClass implements BaseClass {
@Inject
private ServiceOne serviceOne;
}
ExtendedOneClass
public class ExtendedOneClass extends ExtendedTwoClass {
@Inject
private ServiceTwo serviceTwo;
}
ExtendedTwoClass
public class ExtendedTwoClas {
@Inject
private ServiceThree serviceThree;
}
为了能够在扩展类中使用服务,我需要做些什么?
我像我这样设置我的AppModule
public static void bind(ServiceBinder binder) {
binder.bind(BaseClass.class, BaseClassImpl.class);
binder.bind(ExtendedOneClass.class);
binder.bind(ExtendedTwoClass.class);
}
但我似乎无法让服务在扩展类中工作。我假设这是因为扩展类没有使用tapestry的@Inject实例化。所以问题是你如何完成这项任务?
答案 0 :(得分:0)
使用构造函数注入并将服务传递给父构造函数:
public class BaseClassImpl extends ExtendedOneClass implements BaseClass
{
private HibernateSessionSource hibernateSessionSource;
public BaseClassImpl(SystemEnvironment systemEnvironment, LinkSource linkSource,
HibernateSessionSource hibernateSessionSource)
{
super(systemEnvironment, linkSource);
}
}
无论如何,您的设置无效,您需要在此设置中添加服务ID,否则您将拥有实现相同界面的多个服务。这应该有所帮助:
binder.bind(ExtendedOneClass.class).withId("ext1");
与此相结合:
@InjectService("ext1")
private ExtendedOneClass extendedOneClass;