1

我正在尝试getSetting在模型中访问 Coldbox。

在文档和 Coldbox Google Group 帖子中,它明确指出

该模型是您应用程序的一个完全隔离的层,除非您将依赖项注入其中,否则无法访问任何 ColdBox。我们建议您查看我们的 WireBox 依赖注入,以便了解如何为模型注入所需的内容。

他们指向这个文档:http ://wiki.coldbox.org/wiki/WireBox.cfm#The_WireBox_Injector

但是除了重复上面引用的有点令人困惑的文档和谷歌集团帖子之外,没有关于如何做到这一点的真正好的例子。

我尝试在模型顶部进行属性注入:

<cfcomponent displayname="myComponent" output="false">
    <cfproperty name="mySetting" inject="coldbox:setting:mySetting" />
       <cffunction name="myFunction" output="false" hint="index"> 
          <cfset value = getProperty('mySetting') />
           ...

这将返回错误消息:Variable GETPROPERTY is undefined.

我还尝试在我的模型的函数中注入参数,但我知道那是行不通的。

<cffunction name="myFunction" output="false" hint="index">
  <cfargument name="mySetting" inject="coldbox:setting:mySetting">

谁能告诉我如何getSetting通过线盒注入或任何方法传递给模型?

如何在 Coldbox 模型中注入依赖项?

4

2 回答 2

2

你的注射看起来不错。问题是您正在尝试使用组件中未定义的“getProperty()”。它来自框架超类型,仅存在于框架对象中,如处理程序等。属性注入默认情况下将对注入对象的引用直接放入“变量”范围,因此您只需将其作为 variables.mySetting 访问。

您还可以使用 scope 属性控制属性注入的范围:

http://wiki.coldbox.org/wiki/WireBox.cfm#Property_Annotation

参数注入确实有效,但仅适用于构造函数 (init),因为它们由 DI 引擎自动调用。

此外,此参考卡可能比完整的 WireBox 文档更易于阅读,但它显然没有涵盖那么多信息: https ://github.com/ColdBox/cbox-refcards/raw/master/WireBox/ WireBox-Refcard.pdf

免责声明:我是 Team ColdBox 的一员。

于 2014-04-10T21:39:25.927 回答
0

/config/WireBox.cfc中,您为模型对象设置别名:

map('KungFooDAO').to('model.path.to.KungFooDAO');

您可以在此处将 ColdBox 设置作为属性注入:

map('KungFooDAO').to('model.path.to.KungFooDAO')
    .property(name='myDsn', dsl='coldbox:datasource:myDsn');

现在,在 内部KungFooDAO.cfc,您可以引用variables.myDsn具有 ColdBox 设置值的 。

或者,您可以.property()在 WireBox 配置中停止调用并添加如下CFPROPERTY内容KungFooDAO.cfc

<cfproperty name="myDsn" inject="coldbox:datasource:myDsn" />

这些示例取自实时代码(DSN 名称已更改以保护无辜者)。

您的 CFC 模型的 WireBox 条目是什么样的?

于 2014-04-10T21:06:43.500 回答