0

我正在将我的 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>
4

2 回答 2

1

更新:在阅读了 ColdSpring 的做法后,我找到了一种干净的方法来支持这一点。

首先,使用 2 种方法创建一个 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();

原答案:

Luis Majano 的回答

// 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

于 2012-07-26T16:51:07.413 回答
-1

让我们分解一下,看看这里发生了什么。

1.) 您正在创建一个 id 为 foo 的新 bean,并将其映射到 com.foo。要在 Wirebox 中执行此操作,请使用 map 方法并传入您以后要引用它的任何键。接下来使用 to 方法将该键映射到路径
2.) 您希望将映射(结构)传递给组件的 init 方法。为此,只需传入一个正常的结构。这可以是任何值,包括使用 initWith 方法的其他 bean。

<cfscript>
    map("Foo")
        .to("com.foo")
        .initWith({apple=apple,banana=banana})
</cfscript>

您还可以下载 ColdFusion builder 的 Coldbox 插件。这有一个不错的小实用程序,可以让您右键单击冷泉定义文件并将其转换为线盒。希望这可以帮助。

于 2012-07-26T00:56:20.053 回答