2013-06-13 8 views
5

मैं एक समाधान है जो तीन परतों है है: आम, डेटा, और व्यापारसेवा और परियोजना मिश्रण संदर्भ

आम परत ऑब्जेक्ट जिक्र किया गया और अन्य परतों द्वारा इस्तेमाल किया जा रहे हैं परिभाषित करता है। डेटा परत में डेटा एक्सेस कोड होता है और व्यापार परत में व्यावसायिक तर्क होता है। प्रत्येक परत में कई परियोजनाएं होती हैं।

डेटा और व्यापार परतें WCF सेवाओं का पर्दाफाश करती हैं जिनमें सामान्य परत से ऑब्जेक्ट पैरामीटर के रूप में होते हैं। डेटा और व्यावसायिक परत दोनों परियोजना संदर्भों के माध्यम से सीधे सामान्य परत का संदर्भ देते हैं।

व्यवसाय परत डेटा संदर्भ को सेवा संदर्भ के माध्यम से संदर्भित करती है। सेवा संदर्भ 'संदर्भित असेंबली में पुन: उपयोग प्रकार' पर सेट हैं क्योंकि एक व्यापार परत परियोजना में डेटा परत सेवाओं के कई संदर्भ हैं और प्रत्येक डेटा परत सेवाएं सामान्य परत से समान वस्तुओं का उपयोग करती हैं।

मैं व्यापार परत के लिए यूनिट परीक्षण लिख रहा हूं और मुझे लगातार इस तरह की त्रुटियां मिल रही हैं: सामान्य प्रकार का क्लासनाम सामान्य.क्लासनाम में परिवर्तित नहीं किया जा सकता है। टाइप मिस्चैच असेंबली कॉमन के प्रोजेक्ट संदर्भ के साथ फ़ाइल संदर्भ के मिश्रण के कारण हो सकता है। एक परियोजना संदर्भ के साथ फ़ाइल संदर्भ को बदलने का प्रयास करें।

यह एक फ़ाइल संदर्भ नहीं है, यह निश्चित रूप से एक परियोजना संदर्भ है। Looking here I see this item

किसी अन्य असेंबली में परिभाषित एक प्रकार तक पहुंचने के लिए, विजुअल बेसिक कंपाइलर के पास उस असेंबली का संदर्भ होना चाहिए। यह एक एकल, स्पष्ट संदर्भ होना चाहिए जो परियोजनाओं के बीच परिपत्र संदर्भों का कारण नहीं बनता है।

जहां तक ​​मुझे लगता है मैं किसी भी वृत्तीय संदर्भ तो क्या अन्य समस्याओं इस त्रुटि संदेश के कारण और किया जा सकता है की जरूरत नहीं है बता सकते हैं/या कैसे मैं इस तो मेरे समय अद्यतन सेवा संदर्भ पर क्लिक करके और उम्मीद की बहुत बर्बाद कर रोका जा सकता है कि इस बार यह काम करेगा?

ध्यान दें कि मुझे इस आर्किटेक्चर के बारे में कोई विकल्प नहीं मिला है, यह हमारे सॉफ्टवेयर आर्किटेक्ट द्वारा लगाया गया है।

वातावरण दृश्य स्टूडियो के साथ विंडोज 8 2012

+1

बस यह सुनिश्चित करने के लिए कि आपके पास कोई परिपत्र संदर्भ नहीं है। आपके डीएलएल के असेंबली (ए) में असेंबली (बी) का संदर्भ नहीं है जो असेंबली (सी) पर संकलित किया गया है, फिर भी विधानसभा (सी) का असेंबली (ए) का संदर्भ है .... – Skindeep2366

+0

मैंने जांच की है परिपत्र संदर्भ कई बार। मुझे पूरा यकीन है कि यह समस्या नहीं है। –

उत्तर

0

अपने व्यापार परत को संदर्भित क्योंकि सेवा संदर्भ के माध्यम से डेटा परत और डेटा स्तर आप वास्तव में अपने सामान्य परत के लिए एक संदर्भ है एक परिपत्र संदर्भ है। जब आप अपना डब्ल्यूसीएफ संदर्भ उत्पन्न करते हैं तो यह पृष्ठभूमि में कोड जेन द्वारा किया जाता है।

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

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

इस सेवा के संदर्भ में आपके सेवा संदर्भ में जेनरेट कोड में गहराई से अधिक जानकारी के लिए। ऐसा करने के लिए आपको दृश्य स्टूडियो समाधान एक्सप्लोरर में सभी फ़ाइलों को देखने की आवश्यकता को चालू करने की आवश्यकता है और फिर उस सेवा संदर्भ को बनाते समय आपके लिए जेनरेट किए गए कोड में खुदाई करना शुरू करें।

+0

जो आप वर्णन कर रहे हैं वह गोलाकार संदर्भ नहीं है, ए> बी> सी> ए, लेकिन एक पेड़ ए> बी> सी एंड बी> सी –

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