문제

Castle/Monorails 응용 프로그램을 Unity/ASP.NET MVC One으로 변환하고 있습니다.이 구성 요소 구성을 변환하려고 노력하고 있습니다.

<component
  id="ComponentBaseConfiguration"
  service="MyFakeNamespace.BOL.IConfiguration, MyFakeAppDll"
  type="MyFakeNamespace.BOL.ConfigurableConfiguration, MyFakeAppDll">
  <parameters>
    <!-- Setting Configuration (Dictionary<string,string>)-->
    <Config>
      <dictionary>
        <entry key="localHost">#{LocalHost}</entry>            
        <entry key="contentHost">#{ContentHost}</entry>
        <entry key="virtualDir">#{VirtualDir}</entry>            
      </dictionary>
    </Config>
  </parameters>

Unity는 배열을 지원하지만 사전이 아닌 것 같습니다. 다음과 같은 일을하고 싶습니다.

<unity>
<containers>
    <container>
        <types>
            <type name="ComponentBaseConfiguration" type="MyFakeNamespace.BOL.IConfiguration, MyFakeAppDll" mapTo="MyFakeNamespace.BOL.ConfigurableConfiguration, MyFakeAppDll">
                <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration">
                    <property name="Config" propertyType="System.Collections.Generic.Dictionary`2[[System.String, mscorlib], [System.String, mscorlib]],mscorlib">
                        <dictionary>
                            <entry key="localHost">127.0.0.1</keyedValue>
                            <entry key="contentHost">\\content</keyedValue>
                            <entry key="virtualDir">/</keyedValue>
                        </dictionary>
                    </property>
                </typeConfig>
            </type>
        </types>
    </container>
</containers></unity>

이와 같은 것을 어떻게 달성 할 수 있습니까?

도움이 되었습니까?

해결책

나는 당신이 사용해야한다고 생각합니다 방법-이것을 보관하기위한 요소. 좋지는 않지만 해결 방법입니다.

유형은 Unity 컨테이너가 값을 주입하는 데 사용하는 메소드 add (문자열 키, 문자열 값)를 정의해야합니다.

<method name="Add">
 <param name="key" parameterType="string">
  <value value="localHost"/>
 </param>
 <param name="value" parameterType="string">
  <value value="127.0.0.1"/>
 </param>
</method>

Unity는 확실히 컨테이너 구성의 사전을 지원하지 않습니다. 보다 Unity 컨테이너를 사용하여 사전 구축?

다른 팁

제네릭을 처리 할 때 Unity가 버그가 있음을 발견했습니다 (http://unity.codeplex.com/thread/view.aspx?threadid=30292), 이것에 대해 매우 추악한 해결 방법이 있습니다.

public class MyDictionary : Dictionary<string,string>{

    public MyDictionary() { 

    }
}

이제 구성 파일에서 :

        <typeAlias alias="string" type="System.String, mscorlib" />            
        <typeAlias alias="Dictionary" type="MyFakeNamespace.MyDictionary, MyFakeAppDll" />

...

그런 다음 Jehof 제안을 사용합니다.

<type name="ConfigurationDictionary" type="Dictionary">
                    <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration">
                        <method name="Add" key="0">
                            <param name="key" parameterType="string">
                                <value value="localHost"/>
                            </param>
                            <param name="value" parameterType="string">
                                <value value="127.0.0.1"/>
                            </param>
                        </method>
                        <method name="Add" key="1">
                            <param name="key" parameterType="string">
                                <value value="contentHost"/>
                            </param>
                            <param name="value" parameterType="string">
                                <value value="\\content"/>
                            </param>
                        </method>
                        <method name="Add" key="2">
                            <param name="key" parameterType="string">
                                <value value="virtualDir"/>
                            </param>
                            <param name="value" parameterType="string">
                                <value value="/"/>
                            </param>
                        </method>
                    </typeConfig>

                 </type>

메소드 태그의 주요 속성은 메소드를 여러 번 호출하려면 고유해야합니다.

그런 다음 버그가 해결되면 변형률이 약간 변경되면 올바른 유형을 넣을 수 있지만 그대로 떠날 것이라고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top