2009-09-15 19 views
6

मैं में एक महल/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> 

मैं कुछ इस तरह कैसे प्राप्त कर सकते हैं?

+0

मुझे इस तरह काम करने के लिए कुछ मिला। देखें - http://stackoverflow.com/questions/5597492/how-do-i-create-and-populate-a-dictionarystring-object-using-unitys-xml-confi/7901103#7901103 – ScArcher2

+0

यहां पुराना मेरा समाधान है संस्करण - इसमें कोड में कुछ बदलाव की आवश्यकता है - जब मेरे पास समय होगा, तो मैं इसे एकता के नए संस्करण में अनुकूलित करने की कोशिश करूंगा http://unity.codeplex.com/discussions/230927/ – AdaskoTheBeAsT

उत्तर

6

मुझे लगता है कि आपको इसे संग्रहीत करने के लिए विधि का उपयोग करना होगा। यह अच्छा नहीं है लेकिन एक कामकाज है।

आपके प्रकार को एक विधि जोड़ें (स्ट्रिंग कुंजी, स्ट्रिंग मान) परिभाषित करना चाहिए जो एकता कंटेनर मानों को इंजेक्ट करने के लिए उपयोग करता है।

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

एकता निश्चित रूप से कंटेनर कॉन्फ़िगरेशन के लिए शब्दकोशों का समर्थन नहीं करती है। Build Dictionaries using Unity container?

1

मुझे पता चला एकता कीड़े जब जेनेरिक्स (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" /> 

...

और उसके बाद जेहोफ सुझाव का उपयोग:

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

विधि टैग में मुख्य विशेषता विधि को कॉल करने के लिए अनन्य होने की आवश्यकता है कई बार जोड़ें।

फिर, जब बग को हल किया जाएगा तो प्रकार में थोड़ा बदलाव हमें सही प्रकार देने की इजाजत देता है, लेकिन मुझे लगता है कि मैं इसे छोड़ दूंगा।

संबंधित मुद्दे