Что такое coldspring <map> & <list> eqv в wirebox?
Я портирую свой Coldspring xml в Wirebox, но я застрял.
<map>
в Coldspring может создать структуру синглетонов, а затем передать эту структуру в bean-компонент с помощью конструктора или установщика. А также <list>
создает массив.
Что я пишу в Wirebox.cfc, чтобы сделать то же самое?
<bean id="Foo" class="com.foo">
<constructor-arg name="something">
<map>
<entry key="apple">
<ref bean="apple"/>
</entry>
<entry key="banana">
<ref bean="banana"/>
</entry>
</map>
</constructor-arg>
</bean>
<bean id="bar" class="com.bar">
<constructor-arg name="anArray">
<list>
<bean class="com.XX"/>
<bean class="com.YY"/>
</list>
</constructor-arg>
</bean>
2 ответа
Обновление: я нашел чистый способ поддержать это после прочтения, как это делает ColdSpring.
Сначала создайте CFC с двумя методами:
component
{
struct function buildStruct() {
return arguments;
}
array function buildArray() {
var array = [];
for (var index = 1; index <= arrayLen(arguments); index++)
array[index] = arguments[index];
return array;
}
}
Тогда в wirebox config.cfc:
map("Factory")
.to("com.util.wirebox.Factory")
.asSingleton()
.noAutowire();
map("something")
.toFactoryMethod(factory="Factory", method="buildStruct")
.methodArg(name="apple", ref="apple")
.methodArg(name="banana", ref="banana");
map("Foo").to("com.Foo").initArg(name="something", ref="something").asSingleton();
Оригинальный ответ:
// Map Binder so you can do utility methods
map("myBinder").toValue( this );
// Map the singleton maps
map("s1Map").toFactoryMethod("myBinder", "buildMap")
.methodArg(name="mapType", value="1");
// Map A service with a singleton map
map("Service").to("path")
.initArg(name="myMap", ref="s1Map");
Он предложил мне подать ER, и вот оно: http://coldbox.assembla.com/spaces/coldbox/support/tickets/1387-support-for--list--and--map--of-coldspring-xml
Давайте разберемся с этим и посмотрим, что здесь происходит.
1.) Вы создаете новый компонент с идентификатором foo и его сопоставлением с com.foo. Чтобы сделать это в Wirebox, используйте метод map и введите любой ключ, к которому вы хотите обратиться позже. Затем используйте метод to для сопоставления этого ключа с путем
2.) Вы хотите передать карту (структуру) методу init компонентов. Для этого просто перейдите в нормальную структуру. Это может быть любое значение, включая другие bean-компоненты, используя метод initWith.
<cfscript>
map("Foo")
.to("com.foo")
.initWith({apple=apple,banana=banana})
</cfscript>
Вы также можете скачать плагин Coldbox для ColdFusion Builder. В нем есть небольшая полезная утилита, которая позволит вам щелкнуть правой кнопкой мыши файл определения coldspring и преобразовать его в wirebox. Надеюсь это поможет.