2012-01-11 52 views
0

id喜欢在我的WicketApplication中初始化我的导入的Client.class,后者与后端进行通信。我知道我必须在我的WebApplication.class中执行此操作(在init方法中?)。但是我怎么能在我的Page.classes中获得这个实例?我如何与它沟通?Wicket - 初始化外部类

感谢意见

回答

2

您可以通过使用getApplication()WebApplication.get()获取当前的应用。从那里你应该能够缩小它的类型到你自己的实现中,并在你的Client.class属性上调用getter。请记住,应用程序是所有用户之间的共享对象,如果您不希望发生令人讨厌的事情,您的客户属性必须是线程安全的...

+0

您也可以在您的应用程序类上创建一个静态方法,为您执行强制转换,即'MyApplication.get()'将返回'MyApplication'类型。 – biziclop 2012-01-12 15:13:11

0

最不紧密耦合的方式是通过使用像Google Guice这样的依赖注入框架并将实例注入到组件中。除此之外,Cedric Gatay的答案涵盖了很好的解决方案。

使用DI将提供额外的好处,无需担心为单元测试获得不同的实现,因为您可以在测试模块中轻松定义一个实现。

您可以通过在您的页面构造器中手动“注入”您的外部类来保持中立地位。这样可以避免在这一点上包含新技术的麻烦,而不会阻碍稍后切换到新技术的方式。这样你的页面就不会被绑定到一个特定的(你的)WebApplication的实现上,并且可以通过在测试中提供一个不同的(模拟的)你的外部类的实例来轻松测试。

+0

今天我读了关于这个DIs。我对门票很陌生,我首先想到不用注射即可尝试。但不建议没有它的工作,不是吗? – user1090145 2012-01-12 16:26:45

+0

@ user1090145由于我是Wicket和Google Guice的忠实粉丝,所以我不能问这个问题。我认为,它使得解耦更容易被认可,但其他人则认为它在意想不到的地方隐藏了重要信息(如模块)。我的答案中包含了另一种方法。 – Nicktar 2012-01-13 08:28:18