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();

元の回答:

ルイス・マハノの答え

// 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.)fooのIDを持ち、com.fooにマップされた新しいBeanを作成しています。ワイヤーボックスでこれを行うには、mapメソッドを使用し、後で参照するキーを渡します。次に、toメソッドを使用して、そのキーをパスにマップします
2.)マップ(構造)をコンポーネントのinitメソッドに渡します。これを行うには、通常の構造を渡すだけです。これは、initWithメソッドを使用することにより、他のBeanを含む任意の値にすることができます。

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

また、ColdFusionBuilder用のColdboxプラグインをダウンロードすることもできます。これには、コールドスプリング定義ファイルを右クリックしてワイヤーボックスに変換できる、ちょっとしたユーティリティがあります。お役に立てれば。

于 2012-07-26T00:56:20.053 に答える