2011-04-18 22 views
14

मैं संरचना मैप के लिए नया हूँ। मैं निम्न वर्ग के लिए धाराप्रवाह विन्यास के साथ कन्स्ट्रक्टर तर्क कैसे परिभाषित करूं? धन्यवादसंरचना मैप कन्स्ट्रक्टर तर्क

public BlobContainer(CloudStorageAccount account 
       , string containerName 
       , string contentType 
       , BlobContainerPermissions blobContainerPermissions) 
    { 

    } 

उत्तर

3
 For<BlobContainer>() 
      .HybridHttpOrThreadLocalScoped() 
      .Use<BlobContainer>() 
      .Ctor<CloudStorageAccount >("account").Is(...) 
      .Ctor<string >("containerName").Is(...) 
      .Ctor<string >("contentType").Is(...) 
      .Ctor<BlobContainerPermissions >("blobContainerPermissions").Is(...); 
18

आप के बारे में जाना होगा आदिम प्रकार के लिए के रूप में @ozczecho उत्तर दिया:

For<BlobContainer>() 
    .Use<BlobContainer>() 
    .Ctor<string>("containerName").Is("theContainerName") 
    .Ctor<string>("contentType").Is("theContentType"); 

प्रदान की है कि मूल्यों को पंजीकरण के समय में जाना जाता है। आप इसे गैर-आदिम प्रकारों के लिए भी कर सकते हैं, लेकिन आप लचीलापन खो देते हैं कि कंटेनर आपको इस तरह से देता है। डिफ़ॉल्ट या नामित उदाहरण को परिभाषित करना बेहतर है और इसके बजाय इसका उपयोग करें (कंटेनर स्वचालित रूप से आपके लिए डिफ़ॉल्ट उदाहरण हल करेगा)। डिफॉल्ट को परिभाषित करके आप केवल एक पंजीकरण को बदलकर अपने आवेदन में एक प्रकार पर सभी निर्भरताओं को आसानी से बदल सकते हैं।

For<CloudStorageAccount>().Use<TheCloudStorageAccountType>(); 

निर्भरता एक निर्माता निर्भरता कि structuremap करने के लिए आप कंटेनर के साथ यह रजिस्टर करने के लिए की जरूरत नहीं है जाना जाता है होने के साथ एक ठोस प्रकार है तो वह स्वत: समाधान हो जाएगा।

तो यदि क्लाउडस्टॉरेज खाता एक ठोस वर्ग है तो आपको केवल संरचना मानचित्र में इसकी निर्भरता पंजीकृत करने की आवश्यकता है।

+0

क्षमा करें PHeiberg, मैंने गलती से नीचे वोट पर क्लिक किया..और अब मेरी कार्रवाई को पूर्ववत नहीं कर सकता। – ozczecho

+0

@PHeiberg: यदि मुझे विभिन्न स्थानों पर ब्लॉबकॉन्टेनर के उदाहरण की आवश्यकता है लेकिन प्रत्येक स्थान पर मुझे कन्स्ट्रक्टर के लिए अलग-अलग तर्क की आवश्यकता है, तो पंजीकरण समय में तर्क ज्ञात नहीं हैं, तो मैं इसे कैसे प्रदान कर सकता हूं? – Naor

+0

@Naor: फिर आपको BlobContainerFactory (एक वर्ग जो जानता है कि सही तर्क के साथ ब्लॉबकॉन्टेनर कैसे बनाया जाए), या एक Func (जिसमें कंटेनर बनाने के लिए आवश्यक संदर्भ तक पहुंच है) को पंजीकृत करना है। – PHeiberg

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