Coldfusion 模型线盒注入中的Coldbox getSetting

Coldfusion 模型线盒注入中的Coldbox getSetting,coldfusion,dependency-injection,coldbox,wirebox,Coldfusion,Dependency Injection,Coldbox,Wirebox,我试图在模型中访问ColdboxgetSetting 在文档和Coldbox Google Group的帖子中,它明确指出 模型是应用程序的一个完全隔离的层,没有 除非向ColdBox中注入依赖项,否则不能访问任何ColdBox。 我们建议您查看我们的接线盒依赖项注入,这样您就可以看到 如何为模型注入所需的内容 他们指向这个文件: 但是除了有点让人困惑的doc和googlegroup的帖子重复了上面的那句话之外,没有真正好的例子来说明如何做到这一点 我已尝试在模型顶部进行属性注入: <cf

我试图在模型中访问Coldbox
getSetting

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

模型是应用程序的一个完全隔离的层,没有 除非向ColdBox中注入依赖项,否则不能访问任何ColdBox。 我们建议您查看我们的接线盒依赖项注入,这样您就可以看到 如何为模型注入所需的内容

他们指向这个文件:

但是除了有点让人困惑的doc和googlegroup的帖子重复了上面的那句话之外,没有真正好的例子来说明如何做到这一点

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

<cfcomponent displayname="myComponent" output="false">
    <cfproperty name="mySetting" inject="coldbox:setting:mySetting" />
       <cffunction name="myFunction" output="false" hint="index"> 
          <cfset value = getProperty('mySetting') />
           ...
有人能告诉我如何通过线盒注入或任何方法将
getSetting
传递给模型吗


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

/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()
调用,并在
KungFooDAO.cfc
中添加
CFPROPERTY
,如下所示:

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


您的CFC型号的接线盒条目是什么样子的?

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

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

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

此外,此参考卡可能比完整的WireBox文档更易于阅读,但它显然没有涵盖那么多信息:


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

我还没有放置一个!我早上第一件事就是试试这个。另外,我很欣赏你的工作,使用Github的几个插件。我在函数configure(){wireBox={}中放置映射到哪里?映射DSL在configure()方法内部,但在“wireBox”结构声明之外。请看这个例子:当然,记住映射DSL是将注释和属性直接放在CFC中的替代方法。两种方法达到了相同的目的。我确实尝试过使用变量。mySetting,它抛出了一个错误变量是undefinedWell,它突然开始为变量工作。mySetting,可能是缓存问题…谢谢你的卡片,我会亲自来听它工作。记住,即使接收注入的对象是暂时的,也需要重新注入框架,因为映射的元数据缓存在WireBox中以提高性能。最后一个问题,如果我要将其放置在WireBox配置中而不是模型上的属性注入中,我会将其放置在哪里?以下是wirebox配置的要点,它只是当前默认的显式映射,如果您选择使用它们,请转到下面的“//Map绑定”注释所在的位置。请参阅我在其他注释中留下的示例WireBox活页夹配置。
map('KungFooDAO').to('model.path.to.KungFooDAO')
    .property(name='myDsn', dsl='coldbox:datasource:myDsn');