Coldbox getSetting в модели впрыска
Я пытаюсь получить доступ к Coldbox getSetting
в модели.
В документах и сообщениях группы Google Coldbox четко говорится
Модель является полностью изолированным слоем вашего приложения и не имеет доступа ни к чему ColdBox, если вы не внедрили в них зависимости. Мы предлагаем вам взглянуть на нашу инъекцию зависимостей в WireBox, чтобы вы могли увидеть, как модели вводить то, что им нужно.
Они указывают на этот документ: http://wiki.coldbox.org/wiki/WireBox.cfm
Но кроме несколько запутанных постов в документации и Google Группе, повторяющих приведенную выше цитату, нет хорошего примера того, как это сделать.
Я попытался внедрить свойство в верхней части моей модели:
<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 ответа
Ваша инъекция выглядит хорошо. Проблема в том, что вы пытаетесь использовать функцию getProperty(), которая не определена в вашем компоненте. Он происходит из супертипа фреймворка и существует только в таких объектах фреймворков, как обработчики и т. Д. Инъекция свойств по умолчанию помещает ссылку на внедренный объект непосредственно в область "переменных", поэтому вы просто получаете к нему доступ как variables.mySetting.
Вы также можете контролировать область, в которую вводится свойство, с помощью атрибута области действия:
http://wiki.coldbox.org/wiki/WireBox.cfm
Внедрение аргумента работает, но только для конструкторов (init), так как они автоматически вызываются механизмом DI.
Кроме того, эта справочная карта может быть немного проще для чтения, чем полные документы WireBox, но она, очевидно, не охватывает столько информации: https://github.com/ColdBox/cbox-refcards/raw/master/WireBox/WireBox-Refcard.pdf
Отказ от ответственности: я являюсь частью команды 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.
Кроме того, вы можете оставить .property()
вызовите в конфиге WireBox и добавьте CFPROPERTY
Внутри KungFooDAO.cfc
как это:
<cfproperty name="myDsn" inject="coldbox:datasource:myDsn" />
Эти примеры взяты из живого кода (имена DSN изменены, чтобы защитить невинных).
Как выглядит ваша запись в WireBox для вашей модели CFC?