2015-01-22 8 views
8

में एकता का उपयोग कर रहा एक प्रमाणीकरण विशेषता लिखने के लिए एक WCF सेवा अनुप्रयोग (एकता और Unity.Wcf का उपयोग) में कुछ सेवाओं पर लागू करने के लिए कोशिश कर रहा हूँ में एक निर्भरता इंजेक्शन।एक गुण WCF

प्रमाणीकरण प्रमाणीकरण इंटरफ़ेस है जो वर्तमान में सेवा वर्ग में निर्माण इंजेक्शन के माध्यम से इंजेक्शन और प्रत्येक सेवा विधि में सीधे कहा जाता है (सेवा अनुप्रयोग के लिए) एक बाहरी द्वारा किया जाता है।

इससे प्रत्येक सेवा विधियों में बहुत बार दोहराया गया कोड होता है।

इसके बजाय, मैं इसे एक विशेषता में ले जाना चाहता हूं।

लेकिन, मुझे विशेषता में सुलभ होने के लिए प्रमाणीकरण इंटरफ़ेस की आवश्यकता है।

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

मैं कैसे इंजेक्षन कर सकते हैं (या अन्य प्रकार की पहुंच है) मेरी विशेषता में प्रमाणीकरण इंटरफ़ेस?

+1

या तो वापस सेवा लोकेटर के लिए आते हैं और विशेषता एक [विनम्र वस्तु] बनाने (http://xunitpatterns.com/Humble%20Object.html) है कि पूरी तरह से सेवा करने के लिए प्रतिनिधियों को यह निराकरण, या विशेषता निष्क्रिय बनाने के लिए, के रूप में समझाया [यहां] (http://blog.ploeh.dk/2014/06/13/passive-attributes/) और [यहां] (https://www.cuttingedge.it/blogs/steven/pivot/entry.php? आईडी = 98)। – Steven

+0

धन्यवाद स्टीवन, मुझे उन लिंकों का एक पठन होगा – Shevek

+0

मैं अपनी राय [मार्क सीमान की पुस्तक] (http://amzn.to/12p90MG) पर आधारित हूं और इसलिए मैं सेवा लोकेटर को एक विरोधी पैटर्न का इलाज करता हूं। लेकिन अगर स्टीवन ने टिप्पणी के बजाए उत्तर दिया, तो मैं इसे [निष्क्रिय गुण] (http://blog.ploeh.dk/2014/06/13/passive-attributes/) के लिंक के लिए उभारा था। – wigy

उत्तर

0

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

एकता के साथ पहलू बनाने के लिए बस IInterceptionBehavior इंटरफ़ेस को लागू करने और सेवा आप कंटेनर पंजीकरण (निर्देश here) के दौरान सजाने के लिए अभ्यस्त करने के लिए इसे लागू होते हैं।

पहलू के अंदर आप आसानी से उन सभी विशेषताओं को पढ़ सकते हैं जो विधि को अवरुद्ध करने के लिए लागू होते हैं ताकि आप भूमिका निभा सकें जिन्हें आपको विशेषता में आपके प्रमाणीकरण परिदृश्य (लेकिन कोई व्यवहार नहीं) से संतुष्ट करने की आवश्यकता है।

मैं एक demo solution AOP व्याख्या करने के लिए बनाया है, इसे इस्तेमाल करता है CastleWindsor एकता, लेकिन एक ही सिद्धांतों को लागू नहीं।