.net - Using Generics in C# - Calling Generic class from a Generic class -


मेरे पास निम्न के समान एक वर्ग है:

  सार्वजनिक अमूर्त वर्ग प्रबंधक & lt; T, TInterface & gt; : आईएमएनेजर & lt; T & gt; जहां टीइंटरफेस: आईआरएपीसॉजिटरी और लेफ्टिनेंट; टी & gt; {सुरक्षित सार टिन्टेफेस रिपॉजिटरी {प्राप्त; } सार्वजनिक आभासी सूची & lt; T & gt; GetAll () {वापस रिपॉजिटरी। GetAll (); }}  

यह पूरी तरह से ठीक काम करता है, हालांकि, सारभूत घोषणा में TInterface होने से और परिणामी वर्ग में मेरे सामान्य सार वर्ग को विस्तारित करने का एक तरीका है:

  पब्लिक क्लास टेस्ट मैनेजर: मैनेजर & lt; टेस्टऑब्जेक्ट, आईटेस्ट रिपोजिटरी & gt;, आईटेस्ट मैनेजर  

मुझे आईटेस्ट रिपॉझिटरी का उपयोग करने और रियोपोसिटरी संपत्ति को इस तथ्य के कारण सारंगी क्योंकि यह जिन कस्टम विधियों को मुझे पता है और कॉल करने में सक्षम होने की जरूरत है।

जैसा कि मैं परतें बनाना जारी रखता हूं, मुझे यह प्रक्रिया पूरी तरह से स्टैक तक जारी रखना होगा। यदि मेरे पास सामान्य सार नियंत्रक या सेवा स्तर होता तो उदाहरण होंगे:

  सार्वजनिक वर्ग टेस्ट सर्विस: सेवा & lt; टेस्टऑब्जेक्ट, आईटेस्ट मैनेजर & gt ;, आईटेस्ट सेवा   

ऐसा करने का बेहतर तरीका है या क्या यह एक सामान्य वर्ग को एक और जेनेरिक वर्ग को कॉल करने की अनुमति देने का सर्वोत्तम अभ्यास है?

ऐसा लगता है कि आप जो भी करना चाहते हैं, वह प्रबंधक & lt; T & gt; परीक्षणयोग्य बनाने के लिए है, और एक रिकॉजिटरी के रूप में नकली का उपयोग करें जिसे आप विशेष सदस्यों के लिए पूछ सकते हैं।

मामले में, शायद आप इसे अपना डिज़ाइन बदल सकते हैं:

  सार्वजनिक वर्ग प्रबंधक & lt; T & gt; : आईएमएनेजर & lt; T & gt; {सुरक्षित आईआरएपोज़ोरिरी & lt; T & gt; रिपॉजिटरी {प्राप्त; सेट; } // ... सार्वजनिक आभासी सूची & lt; T & gt; GetAll () {वापस रिपॉजिटरी। GetAll (); }}  

अब, परीक्षण के सभी विशिष्ट परीक्षण उप-वर्ग में हैं:

  सार्वजनिक वर्ग परीक्षण प्रबंधक & lt; T & gt; : प्रबंधक & lt; T & gt; {सार्वजनिक नई आईटेस्ट रिपोजिटरी & lt; T & gt; रिपोजिटरी {रिटर्न (आईटीईस्टआरिपॉजिटरी एंड लेफ्टिनेंट; टी एंड जी;) बेस। रिपोजिटरी; } सेट {base.Repository = value; जब आप अपना यूनिट परीक्षण लिखते हैं, तो आप  TestingManager & lt; T & gt;  उदाहरण ( TestingManager & lt; T & gt;  के माध्यम से संदर्भित) बनाते हैं। चर और फ़ील्ड), और आप उन्हें एक परीक्षण रिपॉजिटरी प्रदान करते हैं। जब भी आप अपने  रिपॉजिटरी  से पूछते हैं, तो आपको हमेशा एक जोरदार टाइप रिपॉजिटरी मिलेगी। 

अद्यतन करें:

एक और एक उपवर्ग बिना इसे हल करने का तरीका आप अपने रिपॉजिटरी ऑब्जेक्ट्स को प्रबंधक & lt; T & gt; से पास करने वाले परीक्षण रिपॉजिटरी के रूप में घोषित करते हैं और आप उन्हें प्रबंधक & lt; T & gt; के माध्यम से बिना सीधे पूछते हैं।

  [टेस्ट] सार्वजनिक शून्य GetAll_Should_Call_GetAll_On_Repository_Test () {var testRepository = नया TestRepository (); Var ऑर्डर प्रबंधक = नया प्रबंधक & lt; ऑर्डर & gt; (टेस्ट रिप्जिटरी); // एक आदेश व्यवस्थित करें प्रबंधक विधि आदेश Manager.GetAll (); // जांचने के लिए परीक्षण रिप्लेरीकरण का प्रयोग करें (समझ) कि आदेश प्रबंधक विधि ने काम किया। आईएसटीआरयू (testRepository.GetAllCalled); }  

Comments

Popular posts from this blog

c# - sqlDecimal to decimal clr stored procedure Unable to cast object of type 'System.Data.SqlTypes.SqlDecimal' to type 'System.IConvertible' -

Calling GetGUIThreadInfo from Outlook VBA -

Obfuscating Python code? -