2009-01-25 11 views
7

में कोई प्रकार पंजीकृत किया गया है तो क्या मैं परीक्षण कर सकता हूं कि एकता कंटेनर में एक प्रकार को हल करने और अपवाद को फँसाने के बिना कॉल किया गया है?परीक्षण अगर यूनिटी

उत्तर

12

यूनिटी 2.0 में IsRegistered विधि होगी जिसका उपयोग आप यह पता लगाने के लिए कर सकते हैं कि कंटेनर में कोई प्रकार पंजीकृत है या नहीं।

यूनिटी 2.0 का बीटा 1 कोडप्लेक्स पर 10 फरवरी तक उपलब्ध है। रिलीज नोट्स देखें और इसे यहां डाउनलोड करें; http://unity.codeplex.com/wikipage?title=Unity2%20Beta1

अद्यतन:

डाउनलोड और परीक्षण एकता 2.0 फ़र, 27 वें 2010 को बीटा 1, और यह अब तक उत्पादन के लिए तैयार द्वारा अभी तक है। यदि आप आज यूनिटी 1.2 का उपयोग कर रहे हैं तो आपको अपूर्ण (?) IUnityContainer इंटरफ़ेस की वजह से यूनिटी 2.0 काम करने के लिए कुछ प्रमुख काम करना होगा।

public static class UnityContainerExtensions 
{ 
    public static bool IsRegistered<T>(this IUnityContainer container) 
    { 
     try 
     { 
      container.Resolve<T>(); 
      return true; 
     } 
     catch 
     { 
      return false; 
     } 
    } 
} 

ध्यान दें कि मैं ResolveAll यहाँ का उपयोग नहीं कर रहा हूँ: तो अगर आप IsRegistered विधि आज काम कर करना चाहते हैं, तो आप इस तरह एक विस्तार विधि बना सकते हैं। इस का कारण यह है कि ResolveAll डिफ़ॉल्ट नहीं लौटेगा है (अन-नाम) पंजीकरण के रूप में एकता डॉक्स में कहा गया है:

यह पद्धति उपयोगी है अगर आप एक ही प्रकार लेकिन विभिन्न नामों वाली कई प्रकार का पंजीकृत कर लिया है।

ध्यान रखें कि यह विधि डिफ़ॉल्ट (अनामित) पंजीकरण के लिए एक उदाहरण नहीं लौटाती है।

+0

अद्यतन के लिए धन्यवाद। – johnc

2

आपका एकमात्र अन्य विकल्प (वर्तमान में) ResolveAll<T>() का उपयोग करना और परिणामों की गणना करना है।

+0

संदिग्ध, धन्यवाद – johnc

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