我们有一些在整个 Coldbox 应用程序中使用的插件。
有没有一种方法可以全局注入这些而无需手动指定每个属性?
我查看了Wirebox 文档,但看不到任何相关内容。(完全有可能我忽略了某些东西;这是一个又长又密的页面。)
似乎装饰 FrameworkSupertype 可能是一种方法,但我找不到任何提及这样做。
我们有一些在整个 Coldbox 应用程序中使用的插件。
有没有一种方法可以全局注入这些而无需手动指定每个属性?
我查看了Wirebox 文档,但看不到任何相关内容。(完全有可能我忽略了某些东西;这是一个又长又密的页面。)
似乎装饰 FrameworkSupertype 可能是一种方法,但我找不到任何提及这样做。
我会指出 Stack Overflow 还需要登录并输入主题:)
有几种方法可以实现这一点,老实说,任何方法都有效。
第一种方法是在您想使用它的任何地方简单地调用 getPlugin("myPlugin"),因为 getPlugin() 方法在每个处理程序、视图和布局中都可用。
第二种是使用 mixin 注入并将以下内容放在每个处理程序的顶部,然后从变量范围访问插件: property name="myPlugin" inject="coldbox:plugin:myPlugin";
第三个是让你的所有处理程序像 Joel 建议的那样扩展一个基本处理程序,并将 DI 属性放在你的基本处理程序中。
您提到的第四个是使用 AOP 方面并将其绑定到处理程序目录中每个 CFC 的 init() 方法,并将插件设置为变量范围作为“之后”建议。
第五个选项,将使用拦截器来监听 afterHandlerCreation 通知,并手动将插件注入到 oHandler 对象中。
第六种可能性是使用 requestStartHandler 或 preProcess 拦截点,并将对您的插件的引用放在私有请求集合 (prc) 中,这也将在视图和布局中可用。
有很多选择,老实说,这可能不是全部。就个人而言,我可能会使用 afterHandlerCreation 拦截器,但您应该找到最适合您的拦截器并使用它运行!