0

我是 Tapestry5 用户,有一个关于在扩展类中使用服务的问题。可以说我有以下类结构,

基类

public class BaseClassImpl extends ExtendedOneClass implements BaseClass {

   @Inject
   private ServiceOne serviceOne;
}

扩展类

public class ExtendedOneClass extends ExtendedTwoClass {

   @Inject
   private ServiceTwo serviceTwo;
}

扩展双类

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);
}

但我似乎无法让服务在扩展类中工作。我假设这是因为扩展类没有被挂毯的@Inject 实例化。所以问题是你如何完成这个任务?

4

1 回答 1

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;
于 2012-10-12T06:39:19.873 回答