Coldfusion 什么是coldspring<;地图>&&书信电报;列表>;接线盒中的eqv?

Coldfusion 什么是coldspring<;地图>&&书信电报;列表>;接线盒中的eqv?,coldfusion,coldbox,coldspring,Coldfusion,Coldbox,Coldspring,我正在将我的ColdspringXML移植到Wirebox中,但我被卡住了 Coldspring中的可以创建一个单例结构,然后通过构造函数或setter将该结构传递到“bean”中。然后创建一个数组 我应该在Wirebox.cfc中写些什么来做同样的事情 <bean id="Foo" class="com.foo"> <constructor-arg name="something"> <map> <ent

我正在将我的ColdspringXML移植到Wirebox中,但我被卡住了

Coldspring中的
可以创建一个单例结构,然后通过构造函数或setter将该结构传递到“bean”中。然后
创建一个数组

我应该在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>

让我们将其分解,看看这里发生了什么

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

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

地图(“Foo”)
.to(“com.foo”)
.initWith({apple=apple,banana=banana})

您还可以下载ColdFusion builder的Coldbox插件。这有一个很好的小实用程序,允许您右键单击coldspring定义文件并将其转换为wirebox。希望这能有所帮助。

更新:在阅读了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;
    }
}
原始答复:

:


他建议我提交一份ER,就是这样:

问题是,苹果和香蕉也是豆类。但是,我不认为我可以在
config()
中使用
getInstance()
。是的,我使用的是“小实用程序”,但它阻塞了
。如果苹果是foo之前定义的一个bean,为什么这不起作用?var apple=map(“foo”).to(“com.foo”);map(x).to(y)是否返回y的实例?
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");