Coldbox getSetting在模型线盒注入中

时间:2014-04-10 20:13:18

标签: coldfusion dependency-injection coldbox wirebox

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

在文档和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模型中注入依赖项?

2 个答案:

答案 0 :(得分: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的一员。

答案 1 :(得分: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设置的值。

或者,您可以在WireBox配置中取消.property()调用,并在CFPROPERTY内添加KungFooDAO.cfc,如下所示:

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

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

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