【发布时间】:2012-10-31 09:53:28
【问题描述】:
我一直在使用java中的pico容器为我设计的一个Minecraft插件框架做DI。
插件具有在接口中定义的事件监听器方法,每个接口一个方法。
如果一个特定的类想要玩家加入和离开服务器时的事件,它实现了两个特定的接口;在本例中为 IPlayerLoginEvent 和 IPlayerQuitEvent。
然后我在框架中有一个类,它将每种类型的事件接口作为构造函数注入参数。
这个容器类被标记为@Listener,以便craftbukkit服务器软件调用它。
包装类使用特定于框架的类包装craftbukkit 发送的数据,至少在理论上可以编写与服务器无关的插件。
小例子:
插件 AwesomePlugin 有一个实现 IPlayerLoginEvent 和 IPlayerQuitEvent 的 PlayerHandler 类。然后,框架需要构造每个类“PlayerLogin”和“PlayerQuit”的实例,将 PlayerHandler 作为构造函数参数传入。 PlayerLogin 和 PlayerQuit 实例将依次向 CraftBukkit 注册为事件侦听器。
目前使用 pico 实现的方式,可以在这里看到:
https://github.com/Runsafe/Framework/blob/master/src/no/runsafe/framework/event/EventEngine.java#L32
该代码看起来确实很糟糕,我无法为这种情况找到更优雅的解决方案,所以我现在请求您的指导 :)
【问题讨论】:
-
我建议在您的架构上添加更多信息;如果不深入研究您的代码,就很难了解正在发生的事情。
标签: java dependency-injection adornerdecorator picocontainer