2008-10-28 9 views
12

का उपयोग करके ऐप सेटिंग्स इंजेक्ट करें मैं विंडसर कंटेनर का उपयोग कर किसी ऐपसेटिंग एंट्री (app.config या web.config से) के मूल्य को इंजेक्ट कैसे कर सकता हूं? अगर मैं एक सेवा में एक विंडसर संपत्ति के मूल्य इंजेक्षन करना चाहता था, मैं कुछ इस तरह करना होगा:विंडसर

<properties> 
    <importantIntegerProperty>666</importantIntegerProperty> 
</properties> 
<component 
    id="myComponent" 
    service="MyApp.IService, MyApp" 
    type="MyApp.Service, MyApp" 
    > 
    <parameters> 
     <importantInteger>#{importantIntegerProperty}</importantInteger> 
    </parameters> 
</component> 

हालांकि, क्या मैं वास्तव में क्या करना चाहते हैं एक ऐप सेटिंग से #{importantIntegerProperty} का प्रतिनिधित्व करती है मान ले चर जो इस तरह परिभाषित किया जा सकता है:

<appSettings> 
    <add key="importantInteger" value="666"/> 
</appSettings> 

संपादित करें: स्पष्ट करने के लिए; मुझे एहसास है कि विंडसर और David Hayden article के साथ यह संभवतः संभव नहीं है कि sliderhouserules वास्तव में अपने स्वयं के (डेविड हेडन के) आईओसी कंटेनर के बारे में है, विंडसर नहीं।

मैं निश्चित रूप से इस समस्या का पहला व्यक्ति नहीं हूं इसलिए मैं जानना चाहता हूं कि अन्य लोगों ने इस मुद्दे को कैसे हल किया है?

उत्तर

5

मैं अंततः वेब पर विभिन्न स्रोतों के संकेतों के आधार पर इसके समाधान के साथ आया। अंतिम परिणाम हालांकि विंडसर वर्बैटिम से तीन वर्गों की प्रतिलिपि बनाने और उन्हें थोड़ा सा संशोधित करने में काफी शामिल था। अंतिम परिणाम आपके आनंद के लिए कोडप्लेक्स पर है।

http://windsorappcfgprops.codeplex.com/

मैं मूल रूप से काफी कुछ समय पहले इस कोड को लिखा था तो यह विंडसर 1.0.3 पर आधारित है - हाँ, यह मेरे ले लिया कि लंबे समय परिणाम प्रकाशित करने के लिए चारों ओर पाने के लिए!

कोड (या web.config जाहिर है) आप अपने app.config में इस की अनुमति देता है:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="theAnswer" value="42"/> 
    </appSettings> 
</configuration> 

... और इस तरह से अपनी विंडसर एक्सएमएल कॉन्फ़िग फ़ाइल से पहुँच:

<?xml version="1.0" encoding="utf-8" ?> 
<castle> 
    <components> 
    <component 
     id="answerProvider" 
     service="Acme.IAnswerProvider, Acme" 
     type="Acme.AnswerProvider, Acme" 
     > 
     <parameters> 
     <theAnswer>#{AppSetting.theAnswer}</theAnswer> 
     </parameters> 
    </component> 
    </components> 
</castle> 

समाधान में एक कामकाजी उदाहरण है।

+5

डिक्शनरी एडाप्टर घटक के आधार पर एक और तरीका है, जो विंडसर 2.5 या ओओआरबी में ओओटीबी प्रदान किया जाता है http://codebetter.com/blogs/benhall/archive/2010/07/22/improving-testability-with-the-castle-dictionary- adapter.aspx –

+0

लिंक, Krzysztof के लिए धन्यवाद। मैं भी उस दृष्टिकोण को पसंद करता हूं। –

2

I wrote a post कुछ महीने पहले इसी तरह के मामले के बारे में। यह उचित पैरामीटर इंजेक्ट करने के लिए एक उप-निर्भरता रीसोलवर का उपयोग करता है। आपके मामले में, आप कॉन्फ़िगरेशन प्रबंधक के लिए केवल डायनामिक कॉन्फ़िगरेशन सेटिंग्स बदल सकते हैं।

+0

अच्छा एक। धन्यवाद, मौश। वह सही दिशा में सूचक है जिसे मैं ढूंढ रहा था। –

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