【问题标题】:GWT - GIN - GWTP - Dispatcher Injection ProblemGWT - GIN - GWTP - 调度程序注入问题
【发布时间】:2011-09-13 14:47:00
【问题描述】:

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

现在,有一些由 GWTP 注入的类 (PRESENTERS),我还有一些其他类是在运行时创建的,没有注入,这意味着使用“新”密钥。举个例子吧:

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

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

一种解决方案是将相同的 GIN INJECTOR 放入客户端会话(静态哈希映射)并在非注入类中使用它(我也尝试过这种解决方案,它的工作原理很吸引人)。

我需要更完美的解决方案。

提前谢谢你。

【问题讨论】:

    标签: java gwt gwt-gin gwt-platform


    【解决方案1】:

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

    正如您所说,您不能在使用关键字“new”创建的对象中注入实例。我能想到几个快速、肮脏且不推荐的替代方案:

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

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

    【讨论】:

    • @Luishmahou:同意你的看法。我已经尝试了两种选择。两人都在他们的地方工作。但我认为第一个替代方案更适合我的情况,因为将调度程序传递到层次结构对我来说将是更加困难的工作。因此,我将客户端会话创建为静态哈希图,并将曾经创建的 MyInjector 放入该哈希图中,现在我可以在任何我想要的地方获取相同的实例。但这是正确的方法吗????
    • 解决方案在我回答的最后一段。您需要重构类,以便可以注入它们。当我开始使用 GIN 时,我遇到了同样的问题,我还使用了一个静态变量来保存注入器并在我的其他应用程序周围传递 Dispatcher 和类似的常见实例。但这使得组件难以测试。我一点一点地重构了我的项目,现在一切都被注入和测试了。
    猜你喜欢
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 2011-09-23
    • 2011-09-07
    • 1970-01-01
    相关资源
    最近更新 更多