Tapestry5使用扩展类中的服务。

时间:2012-08-19 17:19:47

标签: java tapestry

我是一个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实例化。所以问题是你如何完成这项任务?

1 个答案:

答案 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;