2009-01-29 17 views
6

आईओसी कंटेनर का उपयोग करते समय आप आदिम प्रकारों को कैसे संभालेंगे?आदिम प्रकार और आईओसी कंटेनर

आईई। यह देखते हुए कि आपके पास है:

class Pinger { 
    private int timeout; 
    private string targetMachine; 

    public Pinger(int timeout, string targetMachine) { 
     this.timeout = timeout; 
     this.targetMachine = targetMachine; 
    } 

    public void CheckPing() { 
     ... 
    } 
} 

आप int और स्ट्रिंग कन्स्ट्रक्टर तर्क कैसे प्राप्त करेंगे?

+0

महान प्रश्न! – Stimul8d

उत्तर

4

इसके लिए एक और इंटरफ़ेस बनाएं।

तो फिर तुम कुछ की तरह मिल जाएगा:

public Pinger(IExtraConfiguration extraConfig) 
{ 
    timeout = extraconfig.TimeOut; 
    targetmachine = extraconfig.TargetMachine; 
} 

मैं अन्य आईओसी कंटेनर के बारे में पता नहीं है, लेकिन महल विंडसर इन अतिरिक्त निर्माता मापदंडों स्वचालित रूप से हल करता है।

+0

यह एक तरफ समस्या का समाधान नहीं करता है, और यह दूसरे पर जटिलता जोड़ता है। हमें यह समझना होगा कि आईओसी कभी-कभी नकारात्मक परिणामों के साथ अप्राकृतिक तरीकों से आपके कोड को वार करेगा। यदि आपको विभिन्न कपकेक प्रकारों के साथ ऑर्डर बनाने की आवश्यकता है, तो आपको एक उदाहरण इंजेक्ट करना होगा और इसे विधि कॉल (मजबूत गंध) के साथ बदलना होगा। आप एक संदर्भ इंजेक्ट कर सकते हैं लेकिन रन-टाइम पर गतिशील रूप से कॉन्फ़िगर कैसे किया जाता है? आपको भी इसे बदलना होगा। इस पर रेत से बाहर निकलने का समय और आईओसी की निर्विवाद सुंदरता के साथ मौसा स्वीकार करें। –

1

यह निर्भर करता है। आईओसी-कंटेनर स्ट्रक्चर मैप आपको उन निष्पादन की घोषणा करने की अनुमति देगा जब आप अपने निष्पादन की शुरुआत में इंस्टेंस को कॉन्फ़िगर करेंगे।

उदा एक रजिस्ट्री में

ForRequestedType<Pinger>() 
    .TheDefault.Is.OfConcreteType<Pinger>() 
    .WithCtorArg("timeout").EqualTo(5000) 
    .WithCtorArg("targetMachine").EqualToAppSetting("machine"); 
1

वसंत में, एक ऊपर संपत्ति मूल्यों एक संपत्ति फ़ाइल से $ का उपयोग करना {प्रॉपर्टी} अंकन देख सकते हैं

<bean class="blah.Pinger"> 
    <constructor-arg value="${blah.timeout}"/> 
    <constructor-arg value="${blah.targetMachine}"/> 
</bean> 

Spring.net में ही कार्यक्षमता PropertyPlaceholderConfigurer, द्वारा प्रदान की जाती है जो एक ही वाक्यविन्यास है, और विन्यास फाइलों में नाम मूल्य खंड का उपयोग करता है।

3

मुझे यकीन नहीं है कि आपकी कठिनाई मूल्य प्रकार या ठोस प्रकार है या नहीं। न तो एक समस्या है। आपको कॉन्फ़िगरेशन इंटरफ़ेस को पेश करने की आवश्यकता नहीं है (यह उपयोगी है अगर आप एक ही पैरामीटर को एकाधिक ऑब्जेक्ट्स में पास करना चाहते हैं, लेकिन आपके द्वारा दिए गए मामले में नहीं)। वैसे भी, यहां विंडसर धाराप्रवाह कोड है, मुझे यकीन है कि कोई जल्द ही एक एक्सएमएल संस्करण जमा करेगा।

container.Register(
      Component.For(typeof(Pinger)) 
       .ImplementedBy(typeof(Pinger)) // This might not be necessary 
       .Parameters(Parameter.ForKey("timeout").Eq("5000"), 
          Parameter.ForKey("targetMachine").Eq("machine") 
       ) 
      ); 
संबंधित मुद्दे