GWT - GIN - GWTP - 调度器注入问题

时间:2011-09-13 14:47:01

标签: java gwt gin gwt-platform

我处在某人可能已经进入的情况。我在我的应用程序中使用GWTP。 GWTP使用GIN作为客户端 依赖注入。 GWTP还使用Dispatcher机制向服务器端发送请求。

现在,有一些类(PRESENTERS)由GWTP注入,我有一些其他类在没有注入的情况下创建运行时意味着使用“新”关键字。我们举个例子:

// Injected
class Dispatcher {
}

// Injected
Class A {
    @Inject // I can do this and access the disp without any hurdle.
    Dispatcher disp;
}

// Created using "new" keywork 
class B {
    //@Inject I can't do this because of B is not an injected class. Correct me if I am wrong here 
    Dispatcher disp;
}

因此,我需要在非注入类中访问Injected类。您可能认为我没有尝试过GWT.Create(Injector.class)方法。我已经尝试了,我能够在非inected类中获取该对象,但是对象Dispatcher是不同的,它将“/ dispatch /”递增(添加)到其基本URL。这意味着我需要拥有GWTP内部使用的相同对象。 GWTP在入口点创建GIN INJECTOR。

一种解决方案是将相同的GIN INJECTOR放到客户端会话(Static Hashmap)中,并在非注入类中使用它(我也尝试过这个解决方案,它就像魅力一样)。

我需要更完美的解决方案才能发挥作用。

提前谢谢。

1 个答案:

答案 0 :(得分:4)

注射就像一个(好的)病毒,一旦你开始使用它,它会在你的源代码中传播。

正如您所说,您无法在使用关键字“new”创建的对象中注入实例。我可以想到一些快速,肮脏和不推荐的替代方案:

  • 创建进样器时(通过GWT.create(MyInjector.class)),将其分配给公共静态变量。 MyInjector应该有一个返回getDispatcher()的{​​{1}}方法。这是一个非常脏的选择,我不推荐它,因为使用它的每个组件都很难测试。
  • 谁在创建Dispatcher的实例?遍历层次结构,直到找到使用注入创建的对象,然后注入B并将其一直传递给Dispatcher的创建者。

现在,我真正建议的是审核你的设计。通常,您应该为每个类注入业务逻辑。如果您传递的是B,我认为Dispatcher会执行一条业务逻辑,因此注入。