سؤال

أقوم بتحويل تطبيق Castle/Monorails إلى وحدة/ASP.NET MVC واحدة ، أنا عالق في محاولة تحويل تكوين المكون هذا:

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

كيف يمكنني تحقيق شيء كهذا؟

هل كانت مفيدة؟

المحلول

أعتقد أنه يجب عليك استخدام طريقة-الأرشفة هذا. إنه ليس لطيفًا ولكنه حل بديل.

يجب أن يحدد نوعك طريقة إضافة (مفتاح السلسلة ، قيمة السلسلة) التي تستخدمها حاوية الوحدة لحقن القيم.

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

الوحدة بالتأكيد لا تدعم القواميس لتكوين الحاويات. نرى بناء القواميس باستخدام حاوية الوحدة؟

نصائح أخرى

لقد اكتشفت أن الوحدة لها أخطاء عند التعامل مع الأدوية الجيلية (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