2012-04-21 21 views
5

थकावट के बिंदु पर पढ़ने और गुगल होने के बाद, मुझे लगता है कि मुझे कुछ मार्गदर्शन की आवश्यकता हो सकती है।कैसल विंडसर 3.0, सेवाएं और एकाधिक कार्यान्वयन

यह आंशिक रूप से कैसल विंडसर 3.0 की शुरूआत के कारण हो सकता है, हालांकि अधिकांश ब्लॉग पोस्ट, SO प्रश्न और अन्य दस्तावेज स्पष्ट रूप से निर्भर हैं जो मैं देख सकता हूं अब कोड को हटा दिया गया है।

तो: समस्या?

मेरे आवेदन में, जो एक डब्ल्यूसीएफ सेवा है जो एक एमवीसी 3 एप्लिकेशन को बैक एंड कोड प्रदान करती है, मेरे पास कई परतें हैं, जिनमें से एक फ़ाइल अपलोड सिस्टम के लिए वायरस स्कैनिंग सेवाएं प्रदान करती है।

public interface IScanService 
{ 
    void Execute(); 
    ScanResult GetResult(); 
} 
WCF सेवा है, जहां निर्माता की तरह लग सकता है में

तो:

ग्राहक कई सेवाओं के स्कैन के लिए समर्थन की मांग की है, स्वाभाविक रूप से मैं पालन किया है और प्रत्येक सेवा स्कैन एक IScanService इंटरफेस, thusly लागू करता है:

public McAfeeFileScanService(IScanService mcAfeeScanService) 
    { 
     _scanService = scanService; 
    } 

मैं कैसे विशेषज्ञ कर सकते हैं कि IScanService जो इंजेक्ट किया जाता है कार्यान्वयन प्रकार McAfeeScanService, या NortonScanService या अन्य कार्यान्वयन की है?

डिफ़ॉल्ट रूप से AFAIK विंडसर पहले पंजीकृत कार्यान्वयन प्रदान करेगा, चाहे वह मैकएफ़ीस्कैन सेवा का प्रकार हो या नहीं।

मैं सेवा ओवरराइड में देख रहा था, हालांकि ऐसा लगता है कि डिपेंडऑन (निर्भरता.ऑन कॉम्पोनेंसेंट()) के पक्ष में विंडसर 3.0 में बहिष्कृत किया गया है [लेकिन मुझे कोई प्रासंगिक उदाहरण नहीं मिला है] Ive ने टाइप की गई फैक्ट्री सुविधाएं भी देखी हैं , और IHandlerSelector में, लेकिन लगता है कि इस के लिए कुछ मार्गदर्शन की आवश्यकता है (प्रतीत होता है आम और शायद सरल) कार्य।

धन्यवाद सब कुछ।

उत्तर

7

ServiceOverride विंडसर 3. में पदावनत है आप इस तरह Dependency.OnComponent उपयोग करने के लिए:

Component.For<ISerializer>().ImplementedBy<JsonSerializer>().Named("jsonSerializer"), 
Component.For<WebConnectionAcceptor, IChannelManager>().ImplementedBy<WebConnectionAcceptor>().Named("webAcceptor"), 
Component.For<ConnectionAcceptorProxy>().Named("webProxy").DependsOn(
     Dependency.OnComponent("connectionAcceptor", "webAcceptor"), 
     Dependency.OnComponent("serializer", "jsonSerializer")) 

OnComponent में प्रथम तर्क नाम बाध्यकारी है, दूसरे घटक नाम है।

+1

हां, यह निष्कर्ष है कि मैं जवाब के लिए उत्साहित हूं। मैं इसे जवाब के रूप में स्वीकार करता हूँ! – M05Pr1mty

2

http://docs.castleproject.org/Default.aspx?Page=Inline-Dependencies&NS=Windsor&AspxAutoDetectCookieSupport=1

पर महल विंडसर विकि पर दूसरा उदाहरण पर एक नज़र यह लगता है ले लो यह आप :)

container.Register ( Component.For() के लिए क्या देख रहे है। ImplementedBy () । डिप्लेन्सऑन (सर्विसऑवरराइड। फोर्के ("लॉगर")। ईक ("सुरक्षित लॉगर")) );

सादर

0

मैंने इस तरह कुछ पोस्ट किया। मेरे पास एक इंटरफेस के दो कार्यान्वयन थे और मैं एक एमवीसी नियंत्रक चाहता था कि मेरे द्वारा तय किए गए एक कार्यान्वयन में से एक का उपयोग करें।

article में मैं इसे करने का एक तरीका बताता हूं, लेकिन संलग्न स्रोत कोड दो अन्य तरीकों से पता चलता है।

उम्मीद है कि इससे मदद मिलती है।

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