我正在尝试访问模型中的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模型中注入依赖项?
答案 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条目是什么样的?